Quando usar o if?
Tags: switch, ternaryoperator, if, ifelse
Published: 2020-05-11 17:42:55

---
title: Quando usar o if?
published: true
date: 2020-05-09 02:33:10 UTC
tags: switch,ternary-operator,if,if-else
canonical_url: 
---

Como desafio a mim mesmo, decidi começar com um tema simples.

Sendo assim, quando usar o _if_?

Primeiramente, vamos contextualizar. O _if_ é uma condicional que determina que certo trecho de código só poderá ser executado caso as condições (1 ou varias condições), sejam verdadeiras.

![](https://cdn-images-1.medium.com/max/436/1*vi-q8L6WD3bhHfy_lugSmQ.png)<figcaption>Bom e velho if</figcaption>

No cenário em que determinado código só pode ser executado caso a condição seja verdadeira, o _if_ resolve muito bem.

Mas, temos alguns cenários onde queremos atribuir determinado valor a uma variável dependendo do valor de uma condicional. Será que compensa usar o _if_? Por exemplo, eu tenho uma variável _fruta_, mas que tipo ela vai ser, depende se essa fruta tem ou não caroço. Com _if_ ficaria algo assim:

![](https://cdn-images-1.medium.com/max/443/1*OzXVFT7ah9YBHNszf_p4GA.png)<figcaption>Condicional usando if-else para atribuir valor</figcaption>

Vê que a lógica funciona, mas será que essa é a melhor forma? Não é errado, mas visualmente fica uma grande quantidade de código para uma atribuição simples, neste caso, que é bem comum, talvez poderíamos usar um ternário:

![](https://cdn-images-1.medium.com/max/918/1*Cse1bzMwOzgoPNL7atKJ2Q.png)<figcaption>Ternário condicional</figcaption>

A legibilidade fica clara, a atribuição por ser simples fica fácil, e economizamos muitas linhas de código.

Um outro cenário que encontramos muito é quando temos condições demais que determinados fluxos podem ter para seguir de acordo com as condições apresentadas, os problemas que geramos com isso são dois, o efeito Ryu e o efeito Inteligência Artificial.

![](https://cdn-images-1.medium.com/max/720/1*7mklkpWKSc_PKfJBG9FXBw.jpeg)<figcaption>Efeito Ryu</figcaption>

![](https://cdn-images-1.medium.com/max/590/1*V2HowwAe3_X6pd8MSQ59Mw.png)<figcaption>Efeito Inteligência Artificial</figcaption>

Brincadeiras a parte, essas condicionais encadeadas de _if-else_ é bem comum em muitos códigos, seja porque era “apenas uma excessão” ou “apenas para mostrar para a PO depois eu faço certo”. A questão é que o uso do _if_ acaba sendo usado além do que deveria, gerando o que chamamos de anti padrão, encapsulamento não explorado. Vulgo, _bad smell_. Para alguns casos, uma boa solução é o uso do _switch_:

![](https://cdn-images-1.medium.com/max/699/1*vhCWH5_6kneknXehiVRbtg.png)<figcaption>Switch-case</figcaption>

A leitura fica mais clara, declarativa, e a manutenção bem mais ágil já que temos o _enum_ deixando bem claro a declaração a qual aquela condicional deve atender. E, se no futuro precisar adicionar mais cenário, precisa apenas mapear um novo estado. Claro, que de acordo com os cenário vai crescendo, o uso do _switch_ passa a ser abusivo e uma nova solução deve ser pensada, como por exemplo, usar um _design-pattern_ como _Builder_, ou um _Factory_, aí vai de acordo com a necessidade.

Por hora, a intenção era falar do uso do _if_.

Qualquer sugestão de melhoria ou correção, deixa nos comentários.

Até logo!