Junior
Quais funções de escopo em Kotlin você conhece?
sobes.tech IA
Resposta da IA
let: Executa um bloco de código num objeto e devolve o resultado da última expressão. Frequentemente usado para chamadas seguras de métodos em objetos nulos.run: Tem duas variantes:- Como função de extensão: Executa um bloco de código no objeto (
this) e devolve o resultado da última expressão. - Como função independente: Executa um bloco de código sem receptor e devolve o resultado da última expressão.
- Como função de extensão: Executa um bloco de código no objeto (
with: Executa um bloco de código num objeto receptor fornecido como argumento e devolve o resultado da última expressão.apply: Executa um bloco de código num objeto (this) e devolve o próprio objeto. Frequentemente usado para configurar propriedades do objeto.also: Executa um bloco de código num objeto (it) e devolve o próprio objeto. Usado para ações secundárias no objeto.
// Exemplo de uso de let
val name: String? = "Kotlin"
val length = name?.let {
// this == null
// it == "Kotlin"
it.length // Retorna o comprimento da string
} // length == 6
// Exemplo de uso de run como extensão
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
listOf(first(), last())
// this == numbers
} // firstAndLast == [1, 3]
// Exemplo de uso de run como função independente
val result = run {
// Sem receptor
println("Executando um bloco")
1 + 2 // Retorna 3
} // result == 3
// Exemplo de uso de with
val configuration = configureUsing {
// this - objeto passado para configureUsing
width = 100
height = 200
}
fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
val example = ScopeExample()
example.builder()
return example
}
class ScopeExample {
var width: Int = 0
var height: Int = 0
}
// Exemplo de uso de apply
val person = mutableListOf<String>().apply {
// this == lista
add("Alice")
add("Bob")
} // person == ["Alice", "Bob"]
// Exemplo de uso de also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
// it == lista
println("Processando lista: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]