Sobes.tech
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