En Scala, las case classes
son una característica fundamental que nos permite crear estructuras de datos inmutables y expresivas. Las case classes proporcionan una sintaxis concisa y poderosa para definir clases que se utilizan principalmente para almacenar datos.
¿Qué son las case classes?
Una case class
en Scala es una clase especial que se utiliza principalmente para representar datos inmutables. Las case classes se caracterizan por varias características distintivas:
- Sintaxis concisa: La definición de una
case class
en Scala es mucho más concisa que la de una clase regular. Scala genera automáticamente un conjunto de métodos útiles, como constructores, métodos de acceso y comparación estructural, basados en los parámetros de lacase class
. - Inmutabilidad: Por defecto, las instancias de
case classes
son inmutables, lo que significa que no se pueden modificar una vez creadas. Esto ayuda a prevenir errores y garantiza la consistencia de los datos. - Comparación estructural: Las
case classes
proporcionan una implementación predeterminada de los métodosequals
,hashCode
ytoString
basados en la comparación estructural de sus campos. Esto facilita la comparación y la impresión de las instancias decase classes
. - Desestructuración: Las
case classes
admiten la desestructuración de patrones, lo que significa que se pueden extraer los valores de sus campos individualmente utilizando patrones concisos.
Sintaxis básica de las case classes:
La sintaxis para definir una case class en Scala es la siguiente:
case class Persona(nombre: String, edad: Int)
En este ejemplo, hemos definido una case class
llamada Persona
con dos parámetros: nombre
de tipo String
y edad
de tipo Int
. Scala generará automáticamente un constructor, métodos de acceso, métodos equals
, hashCode
y toString
basados en estos parámetros.
Uso de case classes:
Las case classes se utilizan principalmente para representar datos y modelar conceptos en nuestros programas. Veamos algunos ejemplos de uso de case classes:
case class Punto(x: Double, y: Double)
val punto1 = Punto(2.5, 3.7)
val punto2 = Punto(1.8, 4.2)
println(punto1.x) // Imprime 2.5
println(punto2.y) // Imprime 4.2
val punto3 = punto1.copy(y = 5.1)
println(punto3) // Imprime Punto(2.5, 5.1)
En este ejemplo, hemos definido una case class Punto
que representa un punto en un plano con coordenadas x e y. Creamos dos instancias de Punto
utilizando el constructor generado automáticamente. Luego, accedemos a los campos x
y y
de las instancias. También podemos utilizar el método copy
para crear una nueva instancia de Punto
con algunos campos modificados.