Tour of Scala

Krotki

Language

W Scali, krotka (ang. tuple) to klasa, która przechowuje elementy różnych typów. Krotki są niezmienne.

Krotki przydają się, gdy chcemy, żeby funkcja zwróciła jednocześnie wiele wartości.

Krotki tworzy się w następujący sposób:

val ingredient = ("Sugar" , 25): Tuple2[String, Int] 

Powyższy kod tworzy krotkę zawierającą element typu String oraz typu Int.

W Scali krotki reprezentowane są przez szereg klas: Tuple2, Tuple3 itd. aż do Tuple22. Za każdym razem, kiedy tworzymy krotkę zawierającą n elementów (n musi zawierać się w przedziale od 2 do 22), Scala tworzy instancję jednej z odpowiadających klas z grupy TupleN i parametryzuje ją odpowiednimi wartościami. W ww. przykładzie jest to Tuple2[String, Int].

Dostęp do elementów

Krotka zapewnia dostęp do swoich elementów z użyciem składni podkreślnika (underscore). tuple._n odwołuje się do n-tego elementu w kolejności (pod warunkiem, że dana krotka zawiera tyle elementów).

println(ingredient._1) // wyświetli Sugar println(ingredient._2) // wyświetli 25 

Dekonstrukcja krotki

Krotki w Scali wspierają dekonstrukcję

val (name, quantity) = ingredient println(name) // wyświetli Sugar println(quantity) // wyświetli 25 

Dekonstrukcja krotek może być bardzo przydatna w dopasowywaniu wzorców (ang. pattern matching)

val planetDistanceFromSun = List( ("Mercury", 57.9), ("Venus", 108.2), ("Earth", 149.6), ("Mars", 227.9), ("Jupiter", 778.3) ) planetDistanceFromSun.foreach { case ("Mercury", distance) => println(s"Merkury jest $distance milionów km od Słońca") case p if p._1 == "Venus" => println(s"Wenus jest ${p._2} milionów km od Słońca") case p if p._1 == "Earth" => println(s"Niebieska Planeta jest ${p._2} milionów km od Słońca") case _ => println("Zbyt daleko...") } 

Ma ona też zastosowanie w wyrażeniach ‘for’.

val numPairs = List((2, 5), (3, -7), (20, 56)) for ((a, b) <- numPairs) { println(a * b) } 

Wartość () typu Unit jest koncepcyjnie taka sama jak wartość () typu Tuple0. Może być tylko jedna wartość tego typu, ponieważ nie zawiera żadnych elementów.

Użytkownicy mogą czasami mieć trudności z wyborem pomiędzy krotkami (tuple) i klasami przypadków (case class). Zazwyczaj klasy przypadków są preferowane wtedy, kiedy elementy niosą ze sobą jakieś większe znaczenie. ``

Contributors to this page: