Sobes.tech
Middle

O que são classes seladas e qual é a sua finalidade?

sobes.tech IA

Resposta da IA

As classes seladas representam hierarquias de classes limitadas. São usadas para representar um conjunto restrito de estados ou valores possíveis.

Principais características e propósitos:

  • Hierarquia limitada: Os descendentes de uma classe selada devem ser declarados no mesmo ficheiro ou aninhados dentro da classe selada antes do Kotlin 1.5. Desde a versão 1.5, esta restrição é relaxada: os descendentes podem estar em qualquer ficheiro do mesmo pacote.
  • Classes enum com estado: Ao contrário das classes enum, cada descendente de uma classe selada pode ter o seu próprio estado e comportamento.
  • when exaustivo: O compilador garante que o bloco when para uma instância de uma classe selada seja exaustivo (todos os casos estão cobertos), se não for especificada uma ramificação else. Isto reduz a probabilidade de erros em tempo de execução.

Exemplo:

sealed class Result<out T> {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
    object Loading : Result<Nothing>() // Instância única
}

fun processResult(result: Result<String>) {
    when (result) {
        is Result.Success -> {
            // Processamento do resultado bem-sucedido
            println("Data: ${result.data}")
        }
        is Result.Error -> {
            // Processamento do erro
            println("Error: ${result.exception.message}")
        }
        Result.Loading -> {
            // Processamento do estado de carregamento
            println("Loading data...")
        }
        // Nenhuma ramificação else necessária, pois todas as subclasses
        // de Result são tratadas pelo compilador
    }
}

Propósito:

  • Representação segura de estados: Representar de forma fiável um número finito de estados possíveis, por exemplo, o resultado de uma requisição de rede (Success, Error, Loading).
  • Melhoria da legibilidade do código: Tornar o código mais explícito ao tratar diferentes casos.
  • Aumento da fiabilidade das expressões when: O compilador ajuda a evitar casos não tratados.
  • Substituição de classes enum com estado: Quando é necessário associar dados a "variantes" específicas de um enumerado.

Assim, as classes seladas fornecem uma forma flexível de modelar conjuntos finitos de valores com a capacidade de armazenar dados específicos para cada valor, garantindo segurança e clareza ao tratar esses valores em expressões when.