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

  1. Sintaxi Bàsica: La sintaxi de les for-comprehensions és similar a la dels bucles for en altres llenguatges, però amb més funcionalitats.
  2. Filtratge: Les for-comprehensions permeten filtrar elements de col·leccions.
  3. Transformació: Es poden transformar els elements de les col·leccions dins d'una for-comprehension.
  4. 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:

for (element <- col·lecció) yield {
  // codi per transformar l'element
}

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

  1. Oblidar el yield: Sense yield, la for-comprehension no retornarà una nova col·lecció.
  2. Condicions Incorrectes: Assegura't que les condicions dins de la for-comprehension siguin correctes per evitar resultats inesperats.
  3. 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.

© Copyright 2024. Tots els drets reservats