O que é Enum em Kotlin?
Um enum class em Kotlin define um conjunto fixo de constantes. Cada constante é uma instância única da classe enum, representando um valor possível dentro de um grupo fechado. É ideal pra representar opções predefinidas como dias da semana, estados, categorias, etc.
Sintaxe básica
enum class Cor {
VERMELHO, VERDE, AZUL, AMARELO
}
fun main() {
val minhaCor = Cor.VERDE
println(minhaCor) // VERDE
println(minhaCor.name) // VERDE
println(minhaCor.ordinal) // 1
}
Cada constante tem name (o nome como String) e ordinal (a posição, começando do zero).
Enum com propriedades
enum class Estado(val sigla: String, val regiao: String) {
SAO_PAULO("SP", "Sudeste"),
RIO_DE_JANEIRO("RJ", "Sudeste"),
BAHIA("BA", "Nordeste"),
PARANA("PR", "Sul")
}
fun main() {
val estado = Estado.BAHIA
println("${estado.name}: ${estado.sigla} - ${estado.regiao}")
// BAHIA: BA - Nordeste
}
Enum com métodos
enum class Operacao {
SOMA {
override fun calcular(a: Double, b: Double) = a + b
},
SUBTRACAO {
override fun calcular(a: Double, b: Double) = a - b
},
MULTIPLICACAO {
override fun calcular(a: Double, b: Double) = a * b
};
abstract fun calcular(a: Double, b: Double): Double
}
fun main() {
println(Operacao.SOMA.calcular(10.0, 3.0)) // 13.0
println(Operacao.MULTIPLICACAO.calcular(10.0, 3.0)) // 30.0
}
Usando com when
Enum combina perfeitamente com when:
enum class StatusPedido { PENDENTE, PROCESSANDO, ENVIADO, ENTREGUE }
fun mensagem(status: StatusPedido): String = when (status) {
StatusPedido.PENDENTE -> "Aguardando confirmação"
StatusPedido.PROCESSANDO -> "Preparando seu pedido"
StatusPedido.ENVIADO -> "Pedido a caminho!"
StatusPedido.ENTREGUE -> "Pedido entregue com sucesso"
}
Funções utilitárias
// Listar todos os valores
Cor.entries.forEach { println(it) }
// Converter de String
val cor = Cor.valueOf("AZUL")
println(cor) // AZUL
Enums são simples, seguros e expressivos. Use sempre que tiver um conjunto fixo de opções no seu domínio.