<?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: Alex Sandro</title>
    <description>The latest articles on DEV Community by Alex Sandro (@alexdlli).</description>
    <link>https://dev.to/alexdlli</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%2F1257293%2F938b2563-6850-47d7-8d92-cacbac17e758.jpeg</url>
      <title>DEV Community: Alex Sandro</title>
      <link>https://dev.to/alexdlli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexdlli"/>
    <language>en</language>
    <item>
      <title>O clean code não vai deixar sua aplicação mais veloz</title>
      <dc:creator>Alex Sandro</dc:creator>
      <pubDate>Sat, 05 Jul 2025 18:30:19 +0000</pubDate>
      <link>https://dev.to/alexdlli/o-clean-code-nao-vai-deixar-sua-aplicacao-mais-veloz-293i</link>
      <guid>https://dev.to/alexdlli/o-clean-code-nao-vai-deixar-sua-aplicacao-mais-veloz-293i</guid>
      <description>&lt;p&gt;Bora desmistificar uma parada que muita gente confunde: &lt;strong&gt;Clean Code não é sinônimo de código mais rápido&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Sim, você leu certo! Muita gente acha que &lt;strong&gt;seguir as melhores práticas&lt;/strong&gt; vai &lt;strong&gt;automaticamente&lt;/strong&gt; &lt;strong&gt;turbinar&lt;/strong&gt; a performance da aplicação. Tenha &lt;strong&gt;calma&lt;/strong&gt; meu pequeno gafanhoto &lt;strong&gt;não é bem assim&lt;/strong&gt; que a banda toca.&lt;/p&gt;




&lt;h2&gt;
  
  
  Clean Code: Pra que serve então?
&lt;/h2&gt;

&lt;p&gt;Pra começo de conversa, &lt;strong&gt;Clean Code&lt;/strong&gt; é sobre deixar seu código &lt;strong&gt;legível, fácil de entender e de dar manutenção&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;É como &lt;strong&gt;organizar&lt;/strong&gt; seu &lt;strong&gt;quarto&lt;/strong&gt;: &lt;strong&gt;não vai&lt;/strong&gt; te fazer &lt;strong&gt;correr mais rápido&lt;/strong&gt;, mas vai te &lt;strong&gt;ajudar&lt;/strong&gt; a &lt;strong&gt;encontrar&lt;/strong&gt; suas coisas rapidinho &lt;strong&gt;e a não tropeçar em nada&lt;/strong&gt;. No mundo do código, &lt;strong&gt;isso significa menos bugs&lt;/strong&gt;, &lt;strong&gt;menos dor de cabeça&lt;/strong&gt; pra quem pega seu projeto e &lt;strong&gt;mais agilidade&lt;/strong&gt; pra evoluir a aplicação.&lt;/p&gt;




&lt;h2&gt;
  
  
  A "velocidade" do código
&lt;/h2&gt;

&lt;p&gt;Quando a gente fala em código rápido, estamos falando de &lt;strong&gt;performance&lt;/strong&gt;. E a performance é medida em coisas tipo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tempo de execução:&lt;/strong&gt; Quanto tempo leva pra sua função rodar?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso de memória:&lt;/strong&gt; Quanta memória seu código consome?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operações por segundo:&lt;/strong&gt; Quantas operações seu sistema consegue fazer em um segundo?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aí que tá o X da questão: Clean Code foca na &lt;strong&gt;legibilidade&lt;/strong&gt; e &lt;strong&gt;manutenibilidade&lt;/strong&gt;, não diretamente na &lt;strong&gt;performance&lt;/strong&gt;. Às vezes, pra deixar o &lt;strong&gt;código super limpo e fácil&lt;/strong&gt; de ler, a gente acaba fazendo umas "voltas" que podem, sim, custar uns &lt;strong&gt;milissegundos a mais ou usar um pouquinho mais de memória&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vamos ver alguns exemplos.&lt;/p&gt;




&lt;h2&gt;
  
  
  GTA V na veia: Exemplos práticos em TypeScript
&lt;/h2&gt;

&lt;p&gt;Vamos pegar o &lt;strong&gt;GTA V&lt;/strong&gt; como nosso campo de &lt;strong&gt;testes&lt;/strong&gt; imaginário. Pensa em algo que acontece o tempo todo no jogo: o &lt;strong&gt;sistema de tiro&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exemplo 1: O código "sujo" e ultra-rápido
&lt;/h3&gt;

&lt;p&gt;Imagina que a gente precisa &lt;strong&gt;calcular o dano de um tiro&lt;/strong&gt; no GTA V. Esse &lt;strong&gt;código&lt;/strong&gt; aqui &lt;strong&gt;não é&lt;/strong&gt; o &lt;strong&gt;mais bonito&lt;/strong&gt; do mundo, mas ele &lt;strong&gt;é direto e reto&lt;/strong&gt;, &lt;strong&gt;feito pra ser rápido&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculateRawDamage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// Posição do alvo&lt;/span&gt;
    &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// Posição do atirador&lt;/span&gt;
    &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Distância máxima de dano&lt;/span&gt;
    &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// É headshot?&lt;/span&gt;
    &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="c1"&gt;// Dano base da arma&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dz&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;distSq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;dx&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dy&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;dy&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dz&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;dz&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Distância ao quadrado (evita sqrt)&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;damage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;distSq&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// Compara distâncias ao quadrado&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Fora do alcance&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;damage&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Modificador de headshot&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;damage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Exemplo de uso:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;enemyPosRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;playerPosRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;105&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;53&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;maxRangeRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Alcance máximo&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;baseDamageRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Dano base&lt;/span&gt;

&lt;span class="c1"&gt;// Calculando o dano de um tiro normal&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;normalDamageRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculateRawDamage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;enemyPosRaw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;playerPosRaw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;maxRangeRaw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Não é headshot&lt;/span&gt;
    &lt;span class="nx"&gt;baseDamageRaw&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Dano (código sujo, normal): &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;normalDamageRaw&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Saída: Dano (código sujo, normal): 20&lt;/span&gt;

&lt;span class="c1"&gt;// Calculando o dano de um headshot&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;headshotDamageRaw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculateRawDamage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;enemyPosRaw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;playerPosRaw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;maxRangeRaw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// É headshot&lt;/span&gt;
    &lt;span class="nx"&gt;baseDamageRaw&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Dano (código sujo, headshot):  &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;headshotDamageRaw&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Saída: Dano (código sujo, headshot): 50&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Por que é mais rápido?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nomes curtos:&lt;/strong&gt; &lt;code&gt;t&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;d&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;, &lt;code&gt;m&lt;/code&gt; economizam caracteres.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cálculo direto de distância ao quadrado:&lt;/strong&gt; Evita &lt;code&gt;Math.sqrt&lt;/code&gt;, uma operação "cara".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sem funções auxiliares:&lt;/strong&gt; Menos "overhead" de chamadas de função.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parâmetros "pelados":&lt;/strong&gt; Evita custo de criação de classes/estruturas mais complexas.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Exemplo 2: O código Clean Code com Programação Funcional (e um pouquinho mais lento)
&lt;/h3&gt;

&lt;p&gt;Agora, vamos abordar o &lt;strong&gt;mesmo problema de cálculo de dano&lt;/strong&gt; com uma pegada funcional. A ideia é ter &lt;strong&gt;funções puras&lt;/strong&gt;, que &lt;strong&gt;recebem entradas&lt;/strong&gt; e &lt;strong&gt;retornam saídas sem efeitos colaterais&lt;/strong&gt;, e compor essas funções para construir a lógica. (Eu sei senior em DDD! Com classes ficaria mais simples, mas eu sou team funcional e para explicar fica mais fácil ^^)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Interfaces para tipagem clara&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Position&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;DamageType&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Normal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;Headshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;2.5&lt;/span&gt; &lt;span class="c1"&gt;// Modificador de dano&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 1. Funções Puras e de Únicas Responsabilidades&lt;/span&gt;

&lt;span class="c1"&gt;// Calcula a distância euclidiana(Da um google) entre dois pontos&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;calculateDistance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Position&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deltaX&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deltaY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deltaZ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deltaX&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;deltaX&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;deltaY&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;deltaY&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;deltaZ&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;deltaZ&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Aplica o modificador de dano&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;applyDamageModifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;baseDamage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;damageType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DamageType&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;baseDamage&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;damageType&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Verifica se o alvo está dentro do alcance&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isInRange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;maxRange&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;maxRange&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// 2. Composição de Funções (a "Orquestração" da Lógica)&lt;/span&gt;

&lt;span class="c1"&gt;// Função que configura e retorna um calculador de dano específico para uma arma&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createWeaponDamageCalculator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;baseDamageWeapon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;maxRangeWeapon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;attackerPos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;targetPos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;damageType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DamageType&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculateDistance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;attackerPos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetPos&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;isInRange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;maxRangeWeapon&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Se fora do alcance, dano é zero&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Aplica o modificador de dano&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;applyDamageModifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;baseDamageWeapon&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;damageType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;


&lt;span class="c1"&gt;// Exemplo de uso:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ak47DamageCalculator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createWeaponDamageCalculator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// AK-47 com 30 de dano, 500m alcance&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;franklinPos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;enemyPos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;headshotDamagePF&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ak47DamageCalculator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;franklinPos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;enemyPos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DamageType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Headshot&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Dano (código funcional, headshot): &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;headshotDamagePF&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Saída: Dano (código funcional, headshot): 75&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;normalDamagePF&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ak47DamageCalculator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;franklinPos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;enemyPos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DamageType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Normal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Dano (código funcional, normal): &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;normalDamagePF&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Saída: Dano (código funcional, normal): 30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Por que é (potencialmente) mais lento (em alguns contextos)?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Múltiplas chamadas de função:&lt;/strong&gt; Quebrar a lógica em várias funções puras aumenta o "overhead" de chamadas de função.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Math.sqrt&lt;/code&gt;:&lt;/strong&gt; A função &lt;code&gt;calculateDistance&lt;/code&gt; ainda usa &lt;code&gt;Math.sqrt&lt;/code&gt;, que é mais custosa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Criação de funções em tempo de execução:&lt;/strong&gt; &lt;code&gt;createWeaponDamageCalculator&lt;/code&gt; retorna uma nova função, o que pode ter um pequeno custo de alocação ou otimização JIT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Imutabilidade:&lt;/strong&gt; Embora implícita aqui, em cenários mais complexos da PF onde cópias imutáveis são feitas, o custo de memória e processamento pode aumentar.
## Moral da história&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O Clean Code, seja ele orientado a objetos, funcional ou misto, foca na &lt;strong&gt;experiência do desenvolvedor&lt;/strong&gt;, tornando o código mais agradável de trabalhar, entender e manter. Isso, a longo prazo, acelera o &lt;strong&gt;desenvolvimento&lt;/strong&gt; e a &lt;strong&gt;manutenção&lt;/strong&gt; do projeto. O código funcional, por sua natureza de funções puras e composição, facilita muito o &lt;strong&gt;teste unitário&lt;/strong&gt; e a &lt;strong&gt;raciocínio sobre o fluxo de dados&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A performance, por outro lado, é uma preocupação mais específica, que geralmente é resolvida com &lt;strong&gt;otimizações pontuais&lt;/strong&gt; (como o truque do &lt;code&gt;distSq&lt;/code&gt; no primeiro exemplo) e um bom entendimento de como as coisas funcionam "por baixo dos panos".&lt;/p&gt;

&lt;p&gt;Não se esqueça: &lt;strong&gt;o tempo do desenvolvedor é caro!&lt;/strong&gt; Escrever código legível e fácil de dar manutenção geralmente vale muito mais a pena do que otimizar cada milissegundo, a menos que você esteja trabalhando em um contexto super específico onde cada ciclo de CPU conta (tipo um motor de jogo de alta performance ou sistemas embarcados). Na maioria dos casos, o Clean Code vai te poupar muitas horas de depuração e estresse.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resumão pra não esquecer:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clean Code = Legibilidade e Manutenibilidade.&lt;/strong&gt; Pense em quem vai ler seu código.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Programação Funcional (PF) = Funções puras, imutabilidade, composição.&lt;/strong&gt; Ótima para código testável e modular.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance = Velocidade e Eficiência.&lt;/strong&gt; Medido em tempo de execução, uso de memória, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Não são a mesma coisa!&lt;/strong&gt; Código mais "limpo" e modular (como na PF) pode ser marginalmente mais lento devido a abstrações.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Priorize a legibilidade, sempre.&lt;/strong&gt; Só otimize performance quando tiver um problema real e mensurável.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O tempo do dev é valioso.&lt;/strong&gt; Código fácil de manter acelera o desenvolvimento.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>braziliandevs</category>
      <category>cleancode</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Vamos falar sobre memory leak (Vazamento de ram)</title>
      <dc:creator>Alex Sandro</dc:creator>
      <pubDate>Tue, 27 May 2025 19:10:37 +0000</pubDate>
      <link>https://dev.to/alexdlli/vamos-falar-sobre-memory-leak-vazamento-de-ram-ejm</link>
      <guid>https://dev.to/alexdlli/vamos-falar-sobre-memory-leak-vazamento-de-ram-ejm</guid>
      <description>&lt;p&gt;Mas, que é o memory leak? &lt;/p&gt;

&lt;p&gt;Imagina que você tá jogando &lt;strong&gt;Mario Kart&lt;/strong&gt; e eu estou te amassando (com toda a humildade). Cada vez que um personagem &lt;strong&gt;usa&lt;/strong&gt; um &lt;strong&gt;item&lt;/strong&gt; (tipo casco vermelho, banana, cogumelo), o jogo precisa de um espacinho na "&lt;strong&gt;memória&lt;/strong&gt;" pra fazer esse item funcionar.&lt;/p&gt;

&lt;p&gt;Agora pensa assim:&lt;br&gt;&lt;br&gt;
O &lt;strong&gt;memory leak&lt;/strong&gt; é tipo se o &lt;strong&gt;Mario&lt;/strong&gt; jogasse um casco vermelho... e o casco &lt;strong&gt;nunca sumisse&lt;/strong&gt; da pista. Ele bate, acerta, faz o que tem que fazer, &lt;strong&gt;mas continua lá&lt;/strong&gt;, invisível, &lt;strong&gt;ocupando espaço&lt;/strong&gt;. E aí o &lt;strong&gt;Luigi&lt;/strong&gt; joga uma banana, o &lt;strong&gt;Yoshi&lt;/strong&gt; usa turbo, e esses itens também &lt;strong&gt;nunca desaparecem de verdade&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Com o tempo, a pista vai ficando cheia de itens “fantasmas” que ninguém vê mais, mas que tão ali &lt;strong&gt;ocupando espaço&lt;/strong&gt; e &lt;strong&gt;deixando o jogo mais lento ou até travando&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No mundo real dos códigos, isso acontece quando o programa usa memória pra alguma tarefa, mas &lt;strong&gt;esquece de liberar depois&lt;/strong&gt;. A &lt;strong&gt;memória vai se enchendo&lt;/strong&gt; igual a pista cheia de bug no Mario Kart, e uma hora... crasha!&lt;/p&gt;




&lt;h3&gt;
  
  
  Memory leak no app = crash em devices low end
&lt;/h3&gt;

&lt;p&gt;Beleza, já entendemos que o &lt;strong&gt;memory leak&lt;/strong&gt; é tipo deixar um monte de itens invisíveis ocupando espaço na pista do Mario Kart, né?&lt;/p&gt;

&lt;p&gt;Agora pensa no seguinte: se você tá jogando isso num &lt;strong&gt;Nintendo Switch topzera&lt;/strong&gt;, talvez ainda dê pra aguentar o tranco por um tempo. Mas se for num &lt;strong&gt;DS velho ou um emulador fraquinho&lt;/strong&gt;, já era! Começa a &lt;strong&gt;travar&lt;/strong&gt;, lagar &lt;strong&gt;e&lt;/strong&gt;… &lt;strong&gt;crash&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Mesma coisa rola com &lt;strong&gt;apps em celulares low end&lt;/strong&gt; (aqueles com pouca memória RAM). Se o app começa a &lt;strong&gt;vazar memória&lt;/strong&gt; — ou seja, vai deixando várias coisas na RAM que não tão mais sendo usadas —, o sistema fica sem espaço, e o Android ou iOS pensa:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Mano, esse app tá descontrolado. Vou derrubar ele antes que zoe tudo aqui."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Resultado?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App fecha do nada&lt;/strong&gt;, o usuário fica irritado, e sua avaliação vai de 5 estrelas pra 1 em 3 segundos.&lt;/p&gt;

&lt;p&gt;Em devices mais potentes, o sistema ainda aguenta o vacilo por um tempo. Mas nos &lt;strong&gt;low end&lt;/strong&gt;, que já tão no limite, &lt;strong&gt;qualquer leak vira um problemão&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;"Mas Alex, pode me dar um exemplo de como meus códigos causam isso?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claro meu querido, um dos erros mais comuns que vejo no React/Ts (Tec que eu uso) é não limpar listeners e coisas do tipo, abaixo um exemplo:&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory Leak com &lt;code&gt;setInterval&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;LeakyTimer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;interval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`O melhor código ^^`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  O que está vazando aqui?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;O &lt;code&gt;setInterval&lt;/code&gt; continua rodando mesmo &lt;strong&gt;depois que o componente sai da tela&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cada vez que esse componente monta, &lt;strong&gt;um novo intervalo é criado&lt;/strong&gt;, mas &lt;strong&gt;nunca é cancelado&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Isso significa que mesmo com o componente desmontado, o intervalo ainda está ativo na memória → &lt;strong&gt;memory leak.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se o usuário &lt;strong&gt;navegar várias vezes&lt;/strong&gt; para dentro e fora do componente, &lt;strong&gt;vários intervalos&lt;/strong&gt; vão se &lt;strong&gt;empilhando&lt;/strong&gt; — todos &lt;strong&gt;ativos&lt;/strong&gt;, &lt;strong&gt;consumindo&lt;/strong&gt; &lt;strong&gt;memória&lt;/strong&gt; e CPU desnecessariamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Versão corrigida com &lt;code&gt;clearInterval&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;SafeTimer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;interval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;O melhor código agora melhor ainda ^^&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// ✅ Limpa o intervalo ao desmontar → evita leak&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;clearInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Count: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resultados
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Bom, nesse artigo não vou te ensinar a procurar memory leaks (Comenta ai caso queira um artigo ou video de como podemos procurar leaks)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dito isso, podemos ver nitidamente em ferramentas de Profiler (Nesse caso o &lt;strong&gt;xcode&lt;/strong&gt; &lt;strong&gt;Instruments&lt;/strong&gt;) o consumo de Ram e processamento antes e depois de corrigirmos leaks no nosso app &lt;/p&gt;

&lt;p&gt;Build &lt;strong&gt;antes&lt;/strong&gt; do fix:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvcdmntkqwe0f5dv2e778.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvcdmntkqwe0f5dv2e778.png" alt="Build antes do fix:" width="263" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Build &lt;strong&gt;depois&lt;/strong&gt; do fix:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudxpr0cqrl7022gjqg4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudxpr0cqrl7022gjqg4d.png" alt="Build depois do fix" width="261" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estamos falando &lt;strong&gt;do mesmo app&lt;/strong&gt;, com a &lt;strong&gt;mesma quantidade de recursos&lt;/strong&gt;, mas apenas se importando com os listeners e recursos da ram é se eles de fato estão sendo liberados.&lt;/p&gt;

&lt;p&gt;Sabemos que as vezes não conseguimos sempre validar todos os nossos casos de uso, e muitas vezes estamos no modo go horse pra entregas, mas se puder sempre dar uma checada nos seus profiles e da uma olhada na perfomance do app garanto que a perfomance do seu app tende a escalar muito.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resumão pra não esquecer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Memory leak&lt;/strong&gt; é tipo deixar item invisível ocupando espaço no Mario Kart: ninguém vê, mas tá ali &lt;strong&gt;pesando tudo&lt;/strong&gt;. No código, isso acontece quando você usa memória e &lt;strong&gt;esquece de devolver&lt;/strong&gt;. Com o tempo, o app começa a engasgar, travar e... &lt;strong&gt;crasha&lt;/strong&gt; — principalmente em devices com pouca RAM.&lt;/p&gt;

&lt;p&gt;Fica ligado nos seus &lt;code&gt;setInterval&lt;/code&gt;, listeners, e tudo que pode ficar rodando sem necessidade. &lt;strong&gt;Usou? Limpou!&lt;/strong&gt; Seu app (e seus usuários) agradecem. 🎮🔥&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>react</category>
      <category>reactnative</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Por que a sua desorganização financeira vai acabar com a sua carreira de dev!</title>
      <dc:creator>Alex Sandro</dc:creator>
      <pubDate>Wed, 31 Jan 2024 01:39:10 +0000</pubDate>
      <link>https://dev.to/alexdlli/por-que-a-sua-desorganizacao-financeira-vai-acabar-com-a-sua-carreira-de-dev-5egh</link>
      <guid>https://dev.to/alexdlli/por-que-a-sua-desorganizacao-financeira-vai-acabar-com-a-sua-carreira-de-dev-5egh</guid>
      <description>&lt;p&gt;Pessoas desenvolvedoras em sua grande maioria não tem a menor noção do quão perigoso é não ter educação financeira básica.&lt;/p&gt;

&lt;p&gt;Segundo o &lt;a href="https://www.infodados.com/2022/06/calculadora-de-renda-brasil.html" rel="noopener noreferrer"&gt;InfoDados&lt;/a&gt;, uma pessoa que ganha R$3.500 já está acima de 80% da população brasileira em receita. Mas como assim vemos tantas pessoas desenvolvedoras em redes sociais reclamando de falta de dinheiro?&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Prólogo
&lt;/h2&gt;

&lt;p&gt;Olá, tudo bem? Eu me chamo Alex e sou um desenvolvedor focado em JS, atualmente atuo com React Native, mas estou sempre ativo no mundo da web. Bom, hoje quero compartilhar com vocês um dos possíveis calcanhares de Aquiles de muitos &lt;strong&gt;devs JRs&lt;/strong&gt; (especialmente no Brasil), a sua organização financeira ou desorganização financeira no caso. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Mas Alex, o que eu estar no vermelho, ou sem uma reserva de emergência influencia no meu desempenho/desenvolvimento como dev?” &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dev Junior &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pra isso vamos ao decorrer desse artigo algumas situações e resoluções.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Problemática
&lt;/h2&gt;

&lt;p&gt;Você já se pegou em alguma situação no seu atual emprego onde ficou pensando: &lt;em&gt;“Cara, se eu não der conta de entregar isso em um prazo impossível, vou perder meu emprego!”&lt;/em&gt;, &lt;em&gt;“Nesses últimos dias estou com um mental bem ruim, isso vai acabar me fazendo perder meu emprego”&lt;/em&gt; ou &lt;strong&gt;pior ainda&lt;/strong&gt; &lt;em&gt;“Estou em um ambiente de trabalho horrível mas não posso perder esse emprego”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Bom, se essas &lt;strong&gt;frases acima&lt;/strong&gt; ou alguma similar já passaram pela sua imaginação, e a sua atual situação financeira foi um checkmate para você continuar simplesmente as aceitando, saiba que isso está &lt;strong&gt;atrapalhando a sua evolução como desenvolvedor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Bom, de certa forma é simples, você tem boletos a pagar e o medo de sujar o seu nome vai acabar não só te mantendo em empregos ruins, aceitando situações indesejadas, mas vai te impedir de evoluir.&lt;/p&gt;

&lt;p&gt;Vamos a um exemplo do seu dia a dia:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Você trabalha diretamente com diretores e pessoas com cargos bem altos na empresa.;&lt;/li&gt;
&lt;li&gt;Certo dia uma dessas pessoas te pede para fazer uma nova feature, você a analisa, pensa em como vai desenvolver e encontra várias brechas de segurança, usabilidade e coisas afins, mas você acha que não é capaz de desenvolver essa feature cumprindo todos os requisitos;&lt;/li&gt;
&lt;li&gt;Você não leva essa informação pra frente, pois você pode estar preso no pensamento: &lt;em&gt;“Puts, se eu chegar com um monte de falha que eu não sou capaz de corrigir posso acabar perdendo meu emprego!”&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tendo essa situação acima, você:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Percebe como isso vai &lt;strong&gt;te travar&lt;/strong&gt; em vários momentos? &lt;/li&gt;
&lt;li&gt;Você não vai conseguir dizer um simples não para algo impossível pelo medo de perder o emprego?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Isso vai te manter preso em empregos horríveis, com jornadas de trabalhos irreais, vai te fazer arrumar um segundo emprego e acabar com a sua saúde mental simplesmente para você comprar aquele &lt;strong&gt;MacBook Pro&lt;/strong&gt; antes da hora. &lt;/p&gt;

&lt;p&gt;Se você não tem a sua vida financeira organizada, toda a sua jornada como dev vai estar comprometida, você vai ficar estagnado tendo que trabalhar muito pra simplesmente pagar contas, não vai conseguir investir seu tempo para evoluir na carreira.&lt;/p&gt;

&lt;p&gt;Talvez você chegue ao nível de ter que &lt;strong&gt;mudar de um emprego&lt;/strong&gt; bom para um &lt;strong&gt;emprego terrível por 500&lt;/strong&gt; reais a mais e isso simplesmente por conta de dívidas. &lt;/p&gt;

&lt;p&gt;Tá entendendo onde eu quero chegar?&lt;/p&gt;

&lt;h2&gt;
  
  
  3.  Reflexão
&lt;/h2&gt;

&lt;p&gt;A sua &lt;strong&gt;organização financeira&lt;/strong&gt; além de &lt;strong&gt;te ajudar&lt;/strong&gt; em &lt;strong&gt;momentos difíceis&lt;/strong&gt; como layoffs e coisas do tipo, vai te possibilitar &lt;strong&gt;dizer sim&lt;/strong&gt; para &lt;strong&gt;novos desafios&lt;/strong&gt; dentro e fora do seu atual trabalho. &lt;/p&gt;

&lt;p&gt;Você vai poder aceitar novos desafios no seu trabalho atual sem medo de não conseguir entregar a demanda porque você vai ter dentro da sua consciência o famoso:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Nem ligo se eu não conseguir entregar, se eu for demitido eu não preciso trabalhar por 1 ano.”&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dev Pleno&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Você vai poder &lt;strong&gt;migrar&lt;/strong&gt; para uma &lt;strong&gt;vaga no exterior&lt;/strong&gt; sem preocupações se vai ou não vai dar conta, sabe o motivo? &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Aaaa se eu não der conta que se dane, eu tenho uma reserva de emergência para 1 ano todo”&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dev Pleno&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4. Conclusão
&lt;/h2&gt;

&lt;p&gt;Bom, espero que isso te ajude, assim como me ajudou, e comece a partir de hoje a cuidar melhor do seu dinheiro. &lt;/p&gt;

&lt;p&gt;Comenta ai embaixo sobre seus perrengues financeiros, e se eles atrapalharam na sua evolução como dev.&lt;/p&gt;

&lt;p&gt;Caso queira me acompanhar por aí, me siga nas minhas redes, sinta-se livre para conversar comigo sobre o mundo do desenvolvimento e afins.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Github:&lt;/strong&gt; &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/alexdlli/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instagram:&lt;/strong&gt; &lt;a href="https://www.instagram.com/alexdlli/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso é tudo pessoal, vejo vocês logo mais ^^&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>career</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
