devterview_$ iniciar simulação

`let`, `run`, `with`, `apply`, `also` — qual usar

MédioPlenoRecursos da linguagem

Pergunta

Kotlin tem cinco scope functions parecidas. Como você escolhe entre `let`, `apply` e `also` (as mais usadas)?

Resposta esperada

Diferem em dois eixos: como o objeto é referenciado dentro do bloco (`it` ou `this`) e o que o bloco RETORNA (o objeto ou o resultado do bloco). `let` — `it`, retorna o resultado do bloco: pra transformar um valor ou executar algo só se não-nulo (`x?.let { ... }`). `apply` — `this`, retorna o OBJETO: pra configurar/inicializar um objeto (`Config().apply { host = ...; port = ... }`). `also` — `it`, retorna o objeto: pra um efeito colateral no meio de uma cadeia sem quebrá-la (`.also { log(it) }`, `.also { require(it.isValid()) }`). `run` e `with` são pra agrupar chamadas num objeto retornando o resultado. Antipadrão: aninhar scope functions até o `it`/`this` virar sopa de letrinhas — se ficou confuso, use uma variável nomeada.

Por que perguntam isso

Pergunta pleno de Kotlin. Sinal bom: os dois eixos (it vs this, retorna objeto vs bloco) e o antipadrão de aninhamento.

#scope-functions#let#apply#also
publicidade

Relacionadas