Middle
O que são 'lazy' e 'lateinit' em Kotlin?
sobes.tech IA
Resposta da IA
lazy - delegado de propriedade para inicialização preguiçosa de propriedades imutáveis (val). O valor é calculado na primeira referência à propriedade e depois é armazenado em cache.
// Exemplo de uso de lazy
val lazyValue: String by lazy {
println("Inicialização") // será exibido apenas uma vez na primeira referência
"Olá, lazy!"
}
lateinit - modificador para propriedades mutáveis (var), que permite adiar a inicialização até ao primeiro acesso. A propriedade deve ser não nula. Usar a propriedade antes da inicialização provoca uma UninitializedPropertyAccessException.
// Exemplo de uso de lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Olá, lateinit!"
}
fun useVariable() {
// Verificação de inicialização antes de usar (opcional, mas recomendada)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("A variável ainda não está inicializada")
}
}
Principais diferenças:
| Característica | lazy |
lateinit |
|---|---|---|
| Tipo de propriedade | val (somente leitura) |
var (mutável) |
| Nullabilidade | Pode ser nullable ou não nullable | Deve ser não nullable |
| Inicialização | Automática, na primeira referência | Manual |
| Atraso na inicialização | Sim, na primeira referência | Sim, declaração sem inicialização |
| Segurança em threads | Por padrão seguro em threads (sincronização), há opções | Não garantido, depende do contexto |
| Exceção ao acessar antes da inicialização | Não, inicializa automaticamente | UninitializedPropertyAccessException |