Les for-comprehensions són una característica poderosa i flexible de Scala que permet treballar amb col·leccions i altres tipus de dades de manera concisa i expressiva. En aquest tema, explorarem com utilitzar les for-comprehensions per iterar sobre col·leccions, filtrar elements, transformar dades i combinar múltiples col·leccions.
Conceptes Clau
- Sintaxi Bàsica: La sintaxi de les for-comprehensions és similar a la dels bucles
for
en altres llenguatges, però amb més funcionalitats. - Filtratge: Les for-comprehensions permeten filtrar elements de col·leccions.
- Transformació: Es poden transformar els elements de les col·leccions dins d'una for-comprehension.
- Combinació de Col·leccions: Es poden combinar múltiples col·leccions en una sola for-comprehension.
Sintaxi Bàsica
La sintaxi bàsica d'una for-comprehension és la següent:
Exemple
val nombres = List(1, 2, 3, 4, 5) val quadrats = for (n <- nombres) yield n * 2 println(quadrats) // Output: List(2, 4, 6, 8, 10)
Filtratge
Es poden afegir condicions dins de la for-comprehension per filtrar elements.
Exemple
val nombres = List(1, 2, 3, 4, 5) val nombresParells = for (n <- nombres if n % 2 == 0) yield n println(nombresParells) // Output: List(2, 4)
Transformació
Les for-comprehensions permeten transformar els elements de les col·leccions.
Exemple
val nombres = List(1, 2, 3, 4, 5) val quadrats = for (n <- nombres) yield n * n println(quadrats) // Output: List(1, 4, 9, 16, 25)
Combinació de Col·leccions
Es poden combinar múltiples col·leccions dins d'una for-comprehension.
Exemple
val nombres = List(1, 2, 3) val lletres = List('a', 'b', 'c') val combinacions = for { n <- nombres l <- lletres } yield (n, l) println(combinacions) // Output: List((1,a), (1,b), (1,c), (2,a), (2,b), (2,c), (3,a), (3,b), (3,c))
Exercicis Pràctics
Exercici 1
Donada una llista de nombres, utilitza una for-comprehension per obtenir una llista dels nombres que són parells i multiplica'ls per 3.
val nombres = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val resultat = for (n <- nombres if n % 2 == 0) yield n * 3 println(resultat) // Output: List(6, 12, 18, 24, 30)
Exercici 2
Donades dues llistes, una de nombres i una altra de lletres, utilitza una for-comprehension per crear una llista de tuples que continguin cada combinació possible de nombre i lletra.
val nombres = List(1, 2, 3) val lletres = List('a', 'b', 'c') val combinacions = for { n <- nombres l <- lletres } yield (n, l) println(combinacions) // Output: List((1,a), (1,b), (1,c), (2,a), (2,b), (2,c), (3,a), (3,b), (3,c))
Errors Comuns i Consells
- Oblidar el
yield
: Senseyield
, la for-comprehension no retornarà una nova col·lecció. - Condicions Incorrectes: Assegura't que les condicions dins de la for-comprehension siguin correctes per evitar resultats inesperats.
- Tipus de Dades: Verifica que les col·leccions i els elements siguin del tipus esperat per evitar errors de tipus.
Resum
Les for-comprehensions són una eina poderosa en Scala per treballar amb col·leccions de manera concisa i expressiva. Permeten iterar, filtrar, transformar i combinar col·leccions amb una sintaxi clara i fàcil de llegir. Practicar amb for-comprehensions t'ajudarà a escriure codi més net i eficient en Scala.
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