En aquest tema, explorarem les estructures de dades funcionals en Scala. Les estructures de dades funcionals són immutables per naturalesa, la qual cosa significa que no es poden modificar després de la seva creació. Això proporciona molts avantatges, com ara la seguretat en concurrència i la facilitat de raonament sobre el codi.
Objectius del Tema
- Entendre la importància de les estructures de dades immutables.
- Aprendre sobre les estructures de dades funcionals més comunes en Scala.
- Implementar i utilitzar aquestes estructures de dades en exemples pràctics.
Conceptes Clau
- Immutabilitat
- Definició: Una estructura de dades immutable no es pot modificar després de la seva creació.
- Avantatges:
- Seguretat en concurrència: No cal preocupar-se per les condicions de carrera.
- Facilitat de raonament: El codi és més fàcil de seguir i depurar.
- Històric de versions: Es poden mantenir versions anteriors de les dades fàcilment.
- Llistes Immutables
- Definició: Una llista immutable és una seqüència ordenada d'elements que no es pot modificar.
- Exemple:
val llista = List(1, 2, 3) val novaLlista = 0 :: llista // Prepend 0 to the list println(novaLlista) // Output: List(0, 1, 2, 3)
- Mapes Immutables
- Definició: Un mapa immutable és una col·lecció de parelles clau-valor que no es pot modificar.
- Exemple:
val mapa = Map("a" -> 1, "b" -> 2) val nouMapa = mapa + ("c" -> 3) println(nouMapa) // Output: Map(a -> 1, b -> 2, c -> 3)
- Sets Immutables
- Definició: Un set immutable és una col·lecció d'elements únics que no es pot modificar.
- Exemple:
val set = Set(1, 2, 3) val nouSet = set + 4 println(nouSet) // Output: Set(1, 2, 3, 4)
Exemples Pràctics
Exemple 1: Treballant amb Llistes Immutables
val llista = List(1, 2, 3, 4, 5) // Afegir un element al principi de la llista val novaLlista = 0 :: llista println(novaLlista) // Output: List(0, 1, 2, 3, 4, 5) // Afegir un element al final de la llista val llistaAmbElementAfegit = llista :+ 6 println(llistaAmbElementAfegit) // Output: List(1, 2, 3, 4, 5, 6)
Exemple 2: Treballant amb Mapes Immutables
val mapa = Map("a" -> 1, "b" -> 2) // Afegir una nova parella clau-valor val nouMapa = mapa + ("c" -> 3) println(nouMapa) // Output: Map(a -> 1, b -> 2, c -> 3) // Actualitzar un valor existent val mapaActualitzat = mapa + ("a" -> 10) println(mapaActualitzat) // Output: Map(a -> 10, b -> 2)
Exemple 3: Treballant amb Sets Immutables
val set = Set(1, 2, 3) // Afegir un nou element val nouSet = set + 4 println(nouSet) // Output: Set(1, 2, 3, 4) // Intentar afegir un element duplicat (no canvia el set) val setAmbDuplicat = set + 3 println(setAmbDuplicat) // Output: Set(1, 2, 3)
Exercicis Pràctics
Exercici 1: Treballant amb Llistes Immutables
Crea una llista immutable de números del 1 al 5. Afegeix el número 0 al principi i el número 6 al final. Imprimeix la llista resultant.
Solució
val llista = List(1, 2, 3, 4, 5) val novaLlista = 0 :: llista :+ 6 println(novaLlista) // Output: List(0, 1, 2, 3, 4, 5, 6)
Exercici 2: Treballant amb Mapes Immutables
Crea un mapa immutable amb les parelles clau-valor ("x" -> 24, "y" -> 25). Afegeix una nova parella ("z" -> 26) i actualitza el valor de "x" a 42. Imprimeix el mapa resultant.
Solució
val mapa = Map("x" -> 24, "y" -> 25) val nouMapa = mapa + ("z" -> 26) + ("x" -> 42) println(nouMapa) // Output: Map(x -> 42, y -> 25, z -> 26)
Exercici 3: Treballant amb Sets Immutables
Crea un set immutable amb els elements 1, 2 i 3. Afegeix el número 4 i intenta afegir el número 2 de nou. Imprimeix el set resultant.
Solució
Resum
En aquest tema, hem après sobre les estructures de dades funcionals en Scala, incloent llistes, mapes i sets immutables. Hem vist com aquestes estructures de dades proporcionen avantatges com la seguretat en concurrència i la facilitat de raonament. També hem treballat amb exemples pràctics i exercicis per reforçar els conceptes apresos. En el proper tema, explorarem les monads i els functors, conceptes clau en la programació funcional.
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