O que são Scope Functions em Kotlin?
Scope Functions são cinco funções da biblioteca padrão do Kotlin — let, run, with, apply e also — que permitem executar um bloco de código no contexto de um objeto. Elas deixam o código mais conciso e expressivo.
A diferença entre elas está em como o objeto é referenciado dentro do bloco (this ou it) e no que cada uma retorna.
Resumo rápido
| Função | Referência | Retorno |
|---|---|---|
let | it | Resultado do lambda |
run | this | Resultado do lambda |
with | this | Resultado do lambda |
apply | this | O próprio objeto |
also | it | O próprio objeto |
let — transformações e null safety
val nome: String? = "Kotlin Brasil"
nome?.let {
println("O nome tem ${it.length} caracteres")
}
Perfeito pra trabalhar com valores nullable de forma segura.
apply — configurar objetos
data class Servidor(var host: String = "", var porta: Int = 0, var protocolo: String = "")
val servidor = Servidor().apply {
host = "api.kotlin.dev.br"
porta = 443
protocolo = "HTTPS"
}
println(servidor)
O apply retorna o próprio objeto, ideal pra configurar e já usar em seguida.
also — ações laterais
val numeros = mutableListOf(1, 2, 3)
.also { println("Lista original: $it") }
.also { it.add(4) }
println(numeros) // [1, 2, 3, 4]
Bom pra logging e debug sem quebrar a cadeia de chamadas.
run — calcular resultado
val resultado = "Kotlin".run {
println("Processando: $this")
length * 2
}
println(resultado) // 12
with — operar sobre um objeto
val sb = StringBuilder()
val texto = with(sb) {
append("Olá, ")
append("mundo!")
toString()
}
println(texto) // Olá, mundo!
Qual usar?
Na dúvida: apply pra configurar, let pra null safety, also pra ações laterais, run pra calcular algo e with quando já tem o objeto em mãos.