Sobes.tech
Middle

¿Cómo usar clases selladas para modelar jerarquías en Kotlin?

sobes.tech AI

Respuesta de la IA

Las clases selladas (sealed classes) se utilizan para representar jerarquías de herencia limitadas, donde todos los subtipos posibles son conocidos en tiempo de compilación.

Características principales:

  • Todos los subtipos directos deben estar en el mismo archivo que la clase sellada (antes de Kotlin 1.5). A partir de Kotlin 1.5, pueden estar en cualquier archivo de la misma compilación.
  • Los subtipos de la clase sellada pueden ser clases normales, data-clases, declaraciones object u otras clases selladas.
  • El constructor de la clase sellada por defecto es privado; otros modificadores (public, protected, internal) no están permitidos.
  • Permiten usar un análisis exhaustivo (exhaustive) en expresiones when, lo que garantiza el manejo de todas las opciones posibles y elimina la necesidad de una rama else.

Ejemplo de uso para modelar el estado de una interfaz de usuario:

sealed class UiState {
    object Loading : UiState() // Estado de carga
    data class Success(val data: String) : UiState() // Datos cargados con éxito
    data class Error(val message: String) : UiState() // Error
}

Uso en una expresión when:

fun handleUiState(state: UiState): String {
    return when (state) {
        UiState.Loading -> "Cargando datos..."
        is UiState.Success -> "Datos cargados con éxito: ${state.data}"
        is UiState.Error -> "Error: ${state.message}"
    }
}

Ventajas:

  • Seguridad de tipos: el compilador verifica que todos los subtipos posibles sean manejados.
  • Legibilidad: muestra claramente qué variantes de datos o estados pueden existir.
  • Conveniencia: simplifica el trabajo con expresiones when.