Decisões eficientes em Kotlin: como tirar vantagem do comando WHEN

Eu tenho repetido em praticamente todas as minhas postagens que em Java somos praticamente obrigados a escrever muito boilerplate (#piadaDeProgramador), e eu pretendo defender esse argumento novamente com outro exemplo da vida real em que a sintaxe do Java é falha quanto às estruturas de decisão.

Imagine que estamos lidando com um sistema onde é necessário aplicar uma porcentagem de desconto de acordo com a idade da pessoa e diferentes margens são aplicadas para idades entre 1–5, 6–10, 11–15, 15–18, 18–45.

É possível perceber antecipadamente que são muitas condições a serem avaliadas, então já pensamos logo em utilizar um switch:

switch(idade) {
//Ops...
}

Mas espera, em Java as condições de um switch devem ser estáticas, e são limitadas a uns poucos tipos de dado, então como eu vou fazer isso? Droga, hora de recair para 5 if-else’s. Ou talvez não.

WHEN you’re about to give up

Uma das vantagens de se programar em linguagens extremamente expressivas como o Kotlin é poder se beneficiar de estruturas como o when. Você pode pensar sobre ela como um switch em Java, porém com muitas outras possibilidades. Veja como ficaria a resolução do problema acima utilizando essa estrutura:

when(idade) {
in 1..5 -> ...
in 6..10- > ...

...
}

O uso do comando in em conjunto com os dois pontos entre um número e o outro em cada “case” do when faz com que qualquer número que esteja dentro daquela sequência satisfaça a condição (incluindo ambos). Legal não é? Mas isso é só o começo. Você pode verificar até mesmo se um objeto é instância de uma classe, e ao mesmo tempo tirar proveito do Smart Cast para fazer chamadas diretas aos membros da classe:

open class Usuarioclass Administrador : Usuario() {
val token = "$#%90@%"
}
class Operador : Usuario() {
val senha = "123456"
}
val usuario: Usuario = Administrador()when(usuario) {
is Administrador -> println(usuario.token)
is Operador -> println(usuario.senha)
}

If you can see it here and you have the courage enough to speak it. It will happen — Conor McGregor

Essa é a vantagem de se utilizar a estrutura de decisão when em Kotlin. Caso tenha gostado dessa postagem, não se esqueça de recomendá-la para que outras pessoas também possam se beneficiar com a leitura. Se quiser aprender um pouco mais sobre a linguagem Kotlin com foco em desenvolvimento de aplicativos android, é só me seguir para acompanhar as próximas postagens.

Até a próxima.

)
Jefferson Tavares de Pádua

Written by

Android Associate Developer, ReactJS & NodeJS

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