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.
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à.
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.
Curs de Programació en Scala
Mòdul 1: Introducció a Scala
- Introducció a Scala
- Configuració de l'Entorn de Desenvolupament
- Conceptes Bàsics de Scala: Sintaxi i Estructura
- Variables i Tipus de Dades
- Operacions Bàsiques i Expressions
Mòdul 2: Estructures de Control i Funcions
- Declaracions Condicionals
- Bucles i Iteracions
- Funcions i Mètodes
- Funcions d'Ordre Superior
- Funcions Anònimes
Mòdul 3: Col·leccions i Estructures de Dades
- Introducció a les Col·leccions
- Llistes i Arrays
- Conjunts i Mapes
- Tuples i Options
- Coincidència de Patrons
Mòdul 4: Programació Orientada a Objectes en Scala
- Classes i Objectes
- Herència i Traits
- Classes Abstractes i Classes Case
- Objectes Companys
- Objectes Singleton
Mòdul 5: Programació Funcional en Scala
- Immutabilitat i Funcions Pures
- Estructures de Dades Funcionals
- Monads i Functors
- For-Comprehensions
- Gestió d'Errors en la Programació Funcional
Mòdul 6: Conceptes Avançats de Scala
- Conversions i Paràmetres Implícits
- Classes de Tipus i Polimorfisme
- Macros i Reflexió
- Concurrència en Scala
- Introducció a Akka