<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tiago Oliveira</title>
    <description>The latest articles on DEV Community by Tiago Oliveira (@issuran).</description>
    <link>https://dev.to/issuran</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F380076%2Fe94951fe-f018-43f5-afd7-620a7d568bc3.png</url>
      <title>DEV Community: Tiago Oliveira</title>
      <link>https://dev.to/issuran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/issuran"/>
    <language>en</language>
    <item>
      <title>Quando usar o if?</title>
      <dc:creator>Tiago Oliveira</dc:creator>
      <pubDate>Sat, 09 May 2020 02:33:10 +0000</pubDate>
      <link>https://dev.to/issuran/quando-usar-o-if-5e1p</link>
      <guid>https://dev.to/issuran/quando-usar-o-if-5e1p</guid>
      <description>&lt;p&gt;Como desafio a mim mesmo, decidi começar com um tema simples.&lt;/p&gt;

&lt;p&gt;Sendo assim, quando usar o &lt;em&gt;if&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Primeiramente, vamos contextualizar. O &lt;em&gt;if&lt;/em&gt; é 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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mj6lnI9k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/436/1%2Avi-q8L6WD3bhHfy_lugSmQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mj6lnI9k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/436/1%2Avi-q8L6WD3bhHfy_lugSmQ.png" alt=""&gt;&lt;/a&gt;Bom e velho if&lt;/p&gt;

&lt;p&gt;No cenário em que determinado código só pode ser executado caso a condição seja verdadeira, o &lt;em&gt;if&lt;/em&gt; resolve muito bem.&lt;/p&gt;

&lt;p&gt;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 &lt;em&gt;if&lt;/em&gt;? Por exemplo, eu tenho uma variável &lt;em&gt;fruta&lt;/em&gt;, mas que tipo ela vai ser, depende se essa fruta tem ou não caroço. Com &lt;em&gt;if&lt;/em&gt; ficaria algo assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a_Xi4eRO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/443/1%2AOzXVFT7ah9YBHNszf_p4GA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a_Xi4eRO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/443/1%2AOzXVFT7ah9YBHNszf_p4GA.png" alt=""&gt;&lt;/a&gt;Condicional usando if-else para atribuir valor&lt;/p&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rxb0VvJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/918/1%2ACse1bzMwOzgoPNL7atKJ2Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rxb0VvJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/918/1%2ACse1bzMwOzgoPNL7atKJ2Q.png" alt=""&gt;&lt;/a&gt;Ternário condicional&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oWg1f02r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/720/1%2A7mklkpWKSc_PKfJBG9FXBw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oWg1f02r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/720/1%2A7mklkpWKSc_PKfJBG9FXBw.jpeg" alt=""&gt;&lt;/a&gt;Efeito Ryu&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JkSne9Wj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/590/1%2AV2HowwAe3_X6pd8MSQ59Mw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JkSne9Wj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/590/1%2AV2HowwAe3_X6pd8MSQ59Mw.png" alt=""&gt;&lt;/a&gt;Efeito Inteligência Artificial&lt;/p&gt;

&lt;p&gt;Brincadeiras a parte, essas condicionais encadeadas de &lt;em&gt;if-else&lt;/em&gt; é 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 &lt;em&gt;if&lt;/em&gt; acaba sendo usado além do que deveria, gerando o que chamamos de anti padrão, encapsulamento não explorado. Vulgo, &lt;em&gt;bad smell&lt;/em&gt;. Para alguns casos, uma boa solução é o uso do &lt;em&gt;switch&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IBWdg3px--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/699/1%2AvhCWH5_6kneknXehiVRbtg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IBWdg3px--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/699/1%2AvhCWH5_6kneknXehiVRbtg.png" alt=""&gt;&lt;/a&gt;Switch-case&lt;/p&gt;

&lt;p&gt;A leitura fica mais clara, declarativa, e a manutenção bem mais ágil já que temos o &lt;em&gt;enum&lt;/em&gt; 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 &lt;em&gt;switch&lt;/em&gt; passa a ser abusivo e uma nova solução deve ser pensada, como por exemplo, usar um &lt;em&gt;design-pattern&lt;/em&gt; como &lt;em&gt;Builder&lt;/em&gt;, ou um &lt;em&gt;Factory&lt;/em&gt;, aí vai de acordo com a necessidade.&lt;/p&gt;

&lt;p&gt;Por hora, a intenção era falar do uso do &lt;em&gt;if&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Qualquer sugestão de melhoria ou correção, deixa nos comentários.&lt;/p&gt;

&lt;p&gt;Até logo!&lt;/p&gt;

</description>
      <category>switch</category>
      <category>ternaryoperator</category>
      <category>if</category>
      <category>ifelse</category>
    </item>
  </channel>
</rss>
