Sobes.tech
Middle

Cuéntame sobre las clases de datos y las clases selladas en Kotlin.

sobes.tech AI

Respuesta de la IA

Las clases de datos en Kotlin se utilizan para almacenar datos. Generan automáticamente métodos útiles como equals(), hashCode(), toString(), copy(), así como componentes para la destructuración.

// Ejemplo de clase de datos
data class User(val name: String, val age: Int)

Las clases selladas se utilizan para representar una jerarquía limitada de clases. Todas las subclases deben definirse en el mismo archivo que la clase sellada (en Kotlin 1.5+ esta restricción se ha flexibilizado). Esto permite que el compilador asegure una exhaustiva revisión de las subclases, por ejemplo, en una expresión when.

// Ejemplo de clase sellada
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Ejemplo de uso de la clase sellada en una expresión when
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Éxito: ${result.data}")
        is Result.Error -> println("Error: ${result.message}")
        Result.Loading -> println("Cargando...")
    }
}

Diferencias principales:

  • Propósito: clases de datos - almacenamiento de datos, clases selladas - restricción de la jerarquía de clases.
  • Métodos generados: clases de datos generan métodos estándar para los datos, clases selladas - no.
  • Restricción de subclases: clases selladas imponen restricciones en la declaración de subclases, clases de datos - no.
  • Exhaustividad en when: el compilador de Kotlin puede verificar la exhaustividad en la revisión de subclases de una clase sellada en when sin necesidad de una rama else.

Tanto las clases selladas como las clases de datos pueden ser abstractas, sin embargo, las clases de datos no pueden ser open (ya que son final por defecto) y no pueden implementar métodos open directamente (solo a través de interfaces o clases abstractas). Las clases selladas son, por defecto, abstractas, y sus constructores son privados.