En aquest tema, explorarem dos conceptes fonamentals en Scala: les tuples i les opcions. Aquests conceptes són molt útils per gestionar dades i tractar amb valors que poden ser nuls o inexistents.

Tuples

Què és una Tuple?

Una tuple és una estructura de dades que permet agrupar múltiples valors en una sola unitat. A diferència de les col·leccions com les llistes o els arrays, les tuples poden contenir elements de diferents tipus.

Creació de Tuples

Les tuples es poden crear utilitzant la sintaxi (valor1, valor2, ...). Scala suporta tuples de fins a 22 elements.

val tuple1 = (1, "Scala", true)
val tuple2 = (42, "Hello", 3.14, 'c')

Accés als Elements

Els elements d'una tuple es poden accedir utilitzant _1, _2, etc.

val (num, lang, bool) = tuple1
println(s"Number: $num, Language: $lang, Boolean: $bool")

println(s"First element: ${tuple2._1}")
println(s"Second element: ${tuple2._2}")
println(s"Third element: ${tuple2._3}")
println(s"Fourth element: ${tuple2._4}")

Exemple Pràctic

val person = ("John", 30, "Engineer")

val name = person._1
val age = person._2
val profession = person._3

println(s"Name: $name, Age: $age, Profession: $profession")

Exercici

Crea una tuple que contingui el teu nom, edat i ciutat. Després, imprimeix cada element de la tuple.

val myTuple = ("Nom", 25, "Ciutat")
println(s"Nom: ${myTuple._1}, Edat: ${myTuple._2}, Ciutat: ${myTuple._3}")

Options

Què és una Option?

Una Option és una estructura de dades que representa un valor que pot o no estar present. És una manera segura de gestionar valors nuls o inexistents.

Creació d'Options

Una Option pot ser Some(valor) si el valor està present, o None si no ho està.

val someValue: Option[Int] = Some(42)
val noneValue: Option[Int] = None

Accés als Valors

Per accedir al valor d'una Option, es pot utilitzar getOrElse, match o altres mètodes com map i flatMap.

val result = someValue.getOrElse(0)
println(s"Result: $result")

noneValue match {
  case Some(value) => println(s"Value: $value")
  case None => println("No value")
}

Exemple Pràctic

def findPerson(name: String): Option[String] = {
  val people = Map("Alice" -> "Engineer", "Bob" -> "Doctor")
  people.get(name)
}

val person1 = findPerson("Alice")
val person2 = findPerson("Charlie")

println(person1.getOrElse("Not found"))
println(person2.getOrElse("Not found"))

Exercici

Escriu una funció que busqui un número en una llista i retorni una Option. Si el número es troba, retorna Some(numero), en cas contrari, retorna None.

def findNumber(numbers: List[Int], target: Int): Option[Int] = {
  numbers.find(_ == target)
}

val numbers = List(1, 2, 3, 4, 5)
val result1 = findNumber(numbers, 3)
val result2 = findNumber(numbers, 6)

println(result1.getOrElse("Not found"))
println(result2.getOrElse("Not found"))

Resum

En aquesta secció, hem après sobre les tuples i les opcions en Scala. Les tuples permeten agrupar múltiples valors de diferents tipus en una sola unitat, mentre que les opcions proporcionen una manera segura de gestionar valors que poden ser nuls o inexistents. Aquests conceptes són fonamentals per escriure codi Scala robust i eficient.

En el següent tema, explorarem la coincidència de patrons, una característica poderosa de Scala per treballar amb estructures de dades complexes.

© Copyright 2024. Tots els drets reservats