0

Resumo: Kotlin Scope Functions

Francisco Rasia
Francisco Rasia

Tudo que você sempre quis saber sobre funções de escopo no Kotlin mas tinha medo de perguntar.


Olá time! Ao longo das últimas semanas eu publiquei uma série de artigos e vídeos sobre as `scope functions` do Kotlin. No post de hoje eu trago todo o conteúdo em um lugar só.


Introdução


Usar as scope functions deixa seu código elegante e com aquele sabor de Kotlin.


As funções de escopo servem para executar um bloco de código dentro do contexto de um objeto.

Quando é invocada com uma função lambda { }, ela forma um escopo temporário, que permite acessar o objeto sem precisar usar o seu nome.

As funções de escopo são muito utilizadas no Kotlin porque simplificam a sintaxe e deixam o código menos verboso e mais legível. Em outras palavras, usar funções de escopo deixa seu código mais idiomático.


Existem cinco funções de escopo: letrunwithapply, e also. Em essência, todas fazem a mesma coisa - executar um bloco de código com um objeto. O que muda entre elas é a maneira como o objeto fica disponível dentro do bloco e qual é o resultado da função lambda.


🚀A função 'let { }'

Essa função usa 'it' como referência do objeto, retorna o resultado do lambda e funciona como uma função de extensão.

É muito comum combinar a função let com uma safe call para executar um bloco de código somente se uma referência não for nula.

Ficou curioso ou curiosa? Assista o tutorial para descobrir o básico da função 'let { }', entender porque usamos essa função juntamente com o safe call e como criar chamadas encadeadas:




🚀 A função run { }


A função run { } é muito parecida com let { }.

No entanto, na run { } o objeto de contexto fica disponível como receptor da função com o operador this implícito. Ela também retorna o resultado do lambda.

Essa função é útil quando o lambda contém tanto a inicialização do objeto quando a computação do valor de retorno.

Ela pode ainda ser invocada isoladamente (sem objeto de contexto) - nesse caso, serve basicamente para delimitar um trecho de código.



🚀 A função with { }


A função with { } é um tanto parecida com a run { }. O objeto de contexto fica disponível como receptor da função com o operador this implícito. Ela também retorna o resultado do lambda. No entanto, ao contrário da runwith não pode ser invocada sem um objeto de contexto.

Essa função é muito útil para agrupar chamadas de funções do mesmo objeto, reduzindo as chamadas repetitivas.

Pode ser interpretada como: com esse objeto, faça o seguinte.



🚀 A função also { }

A função also { } é um tanto parecida com a let { }, pois as duas podem ser executadas como uma função de extensão. Porém, na função also { }, o objeto de contexto fica disponível argumento da por meio do operador it. Ela retorna o próprio objeto.

Essa função é muito útil para fazer chamadas independentes entre si, e quando queremos ter acesso ao objeto, mas não aos seus atributos. Pode ser interpretada como: ...e também faça isso com o objeto.

Veja os exemplos no vídeo: