Como escolher a Scoping Function que você precisa?

Thais Aquino
Dec 12, 2018 · 3 min read

Você quer fazer um código Kotlin bonitão usando Scoping Function, mas percebe que todas as opções são muito parecidas, certo? Nada melhor do que exemplos para poder assimilar. Aqui vão alguns para ajudar :)

Precisa transformar algo? let, run e with

Para os exemplos de let, run e with a seguir considerem o Pair:

val attributes = Pair("Tony Stark", 30)

E a classe Pessoa

data class Person(
val name: String,
val age: Int,
var profession: String? = null,
var nickname: String? = null
)

let

Retorna qualquer valor a partir de um objeto do qual o escopo se originou e refere-se a esse objeto como it.

run

Retorna qualquer valor a partir de um objeto do qual o escopo se originou e refere-se a esse objeto como this.

with

Retorna qualquer valor a partir de um objeto do qual o escopo se originou e refere-se a esse objeto como this

Pareci repetitiva? Pois é! Todos os exemplos pegam um Pair e transformam em um objeto do tipo Pessoa. Esses 3 scoping functions tem o mesmo propósito.


Não precisa transformar, apenas trabalhar com um objeto de forma mais organizada? apply e also

Para os exemplos de apply e also, considerem esse objeto daquela mesma classe Pessoa lá de cima:

val person = Person("Tony Stark", 30)

apply

Retorna o próprio objeto do qual partiu o escopo e dentro desse escopo o objeto é referido como this

also

Retorna o próprio objeto do qual partiu o escopo e dentro desse escopo o objeto é referido como it


Não curtiu tantos it? Nas funções que usarem it você pode nomeá-lo da forma que quiser:

Não curtiu tantos this? Funções que usam this você pode omiti-lo :)


Validação de Nullables

Um uso muito bacana para Scoping Functions é quando você precisa operar em algum objeto que pode ser nulo:

A função mapToPerson aceita um objeto não nulo, validando desta forma com o “?.let” garantimos que ela só será chamada se houver algum valor na variável attPair.


“This” externo e “this” do escopo, como usar?

Nas Scoping Functions que fazem uso do this como o apply, run e with, caso precise recuperar o this externo ao escopo do bloco basta informar de qual escopo ele pertence usando o this@ .

Já nas Scoping Functions que fazem uso do it não há necessidade, pois o this acessado dentro do bloco já é referente ao escopo externo.


Ainda na dúvida? Tem esse resuminho

Podem conferir esse post da Nicole Borrelli que está super bacana de entender também!

😉

luizalabs

Utilizar a tecnologia para oferecer uma experiência diferenciada ao cliente. Este é o objetivo do LuizaLabs, o laboratório de Tecnologia e Inovação do Magazine Luiza.

Thais Aquino

Written by

🤓📱👶 ❤️

luizalabs

luizalabs

Utilizar a tecnologia para oferecer uma experiência diferenciada ao cliente. Este é o objetivo do LuizaLabs, o laboratório de Tecnologia e Inovação do Magazine Luiza.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade