Middle
Qual é a diferença entre as funções de extensão let, run, also e apply em Kotlin?
sobes.tech IA
Resposta da IA
let: Chama um encerramento no objeto e devolve o resultado do encerramento. Permite usar o objeto como argumento na expressão lambda (it). Útil para trabalhar com objetos nullable.
// Exemplo de uso de let
val nullableString: String? = "Hello"
val length = nullableString?.let {
// it - é uma String não nula
it.length
}
run: Executa um bloco de código num objeto e devolve o resultado do bloco. Dentro do bloco, o objeto está disponível como this. Útil para inicializar objetos e chamar métodos posteriormente.
// Exemplo de uso de run
val result = buildString {
// this - é um StringBuilder
append("Start\n")
append("Middle\n")
}.run {
// this - é um String
uppercase()
}
also: Invoca um encerramento no objeto e devolve o próprio objeto. Permite realizar ações adicionais (como registo ou configuração) no objeto sem modificá-lo.
// Exemplo de uso de also
val list = mutableListOf("a", "b", "c").also {
// it - é um MutableList
println("Lista criada: $it")
}
apply: Invoca um encerramento no objeto e devolve o próprio objeto. Dentro do bloco, o objeto está disponível como this. Útil para configurar propriedades do objeto.
// Exemplo de uso de apply
val textView = TextView(context).apply {
// this - é um TextView
text = "Olá, mundo!"
textSize = 16f
setTextColor(Color.BLACK)
}
Principais diferenças:
| Função | Como o objeto é acessível | O que devolve | Uso típico |
|---|---|---|---|
let |
it |
Resultado da lambda | Objetos nullable, transformação |
run |
this |
Resultado da lambda | Inicialização e chamadas de métodos |
also |
it |
O próprio objeto | Ações adicionais (efeitos colaterais) |
apply |
this |
O próprio objeto | Configuração de propriedades |