{"componentChunkName":"component---src-templates-blog-post-js","path":"/novas-features-do-es2021-es12/","result":{"data":{"markdownRemark":{"fields":{"slug":"/novas-features-do-es2021-es12/"},"frontmatter":{"title":"Novas features do ES2021/ES12.","description":"Conhecendo as novas features da melhor linguagem de programação do mundo! xD","date":"10 de novembro de 2020","thumbnail":"/assets/img/1_qryy7n9t0sypta4xmkmjvq.png"},"html":"<h1>Introdução</h1>\n<p>Faaaaala galera, tudo certo? Não poderia faltar um post sobre as novas features do ES12 aqui no blog, né? Então sem enrolação, bora lá passar pelas principais features!</p>\n<h1>String replaceAll()</h1>\n<p>Eu ouvi um amém? Huahuaha.<br>\nFinalmente um método nativo para isso! <s>Chega de gambiarras com loop.</s></p>\n<p>O que o <code class=\"language-text\">replaceAll()</code> faz é retornar uma nova <code class=\"language-text\">String</code> com <strong>todas</strong> as ocorrências de um padrão substituídas por um determinado caractere.</p>\n<p>Oooou seja, ele faz exatamente o que o <code class=\"language-text\">replace()</code> faz, mas agora percorrendo e substituindo todas as strings correspondentes. Muito mágico, né?</p>\n<p>Para entendermos a diferença, bora ver um exemplo do método <code class=\"language-text\">replace()</code> primeiro:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Exemplo replace()</span>\n<span class=\"token keyword\">const</span> minhaString <span class=\"token operator\">=</span> <span class=\"token string\">\"Gian é o cara do Back-End! Ele ama muito Back-End!\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> novaString <span class=\"token operator\">=</span> minhaString<span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Back\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Front\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>novaString<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \n<span class=\"token comment\">// \"Gian é o cara do Front-End! Ele ama muito Back-End!\"</span></code></pre></div>\n<p>Perceba que apenas a primeira ocorrência da <code class=\"language-text\">String</code> \"Back\" foi substituída. Not cool, buddy >:(</p>\n<p>Agora um exemplo com <code class=\"language-text\">replaceAll()</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Exemplo replaceAll()</span>\n<span class=\"token keyword\">const</span> minhaString <span class=\"token operator\">=</span> <span class=\"token string\">\"Gian é o cara do Back-End! Ele ama muito Back-End!\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> novaString <span class=\"token operator\">=</span> minhaString<span class=\"token punctuation\">.</span><span class=\"token function\">replaceAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Back\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Front\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>novaString<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \n<span class=\"token comment\">// \"Gian é o cara do Front-End! Ele ama muito Front-End!\"</span></code></pre></div>\n<p>Outra dica legal é que da para concatenar o método <code class=\"language-text\">replaceAll()</code> numa <code class=\"language-text\">String</code>, assim você pode determinar na mesma linha vários padrões que deseja substituir na <code class=\"language-text\">String</code>. Mas cuidado, repense se essa solução é de fato a solução ideal, fechou? Bora pra próxima xD.</p>\n<h1>Métodos e Acessadores Privados</h1>\n<blockquote>\n<p>Acessadores, Gian? Sério?</p>\n</blockquote>\n<p>Pois é meu querido, acredite ou não essa é a palavra em português adotada pela MDN para representar os <strong>Accessors</strong>. Doido, né?</p>\n<p>Agora podemos definir um método como privado utilizando o caractere <code class=\"language-text\">#</code> antes de seu nome. Simples assim, agora você tem um método que só pode ser acessado dentro da classe em que foi definido. Magic!</p>\n<p>Se liga no exemplo:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Pessoa</span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token comment\">// Metodo privado</span>\n  <span class=\"token function\">#metodoPrivadoMuitoLouco</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Eu sou privado, hehehe\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">// Metodo público</span>\n  <span class=\"token function\">metodoPublicoComum</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">#metodoPrivadoMuitoLouco</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> objetoDePessoa <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Pessoa</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nobjetoDePessoa<span class=\"token punctuation\">.</span><span class=\"token function\">metodoPublicoComum</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// \"Eu sou privado, hehehe\";</span>\nobjetoDePessoa<span class=\"token punctuation\">.</span><span class=\"token function\">metodoPrivadoMuitoLouco</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// TypeError: objetoDePessoa.metodoPrivadoMuitoLouco is not a function</span></code></pre></div>\n<p>Além do método, também é possível definir acessadores com a mesma sintaxe, confere o exemplo:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Pessoa</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Acessador público</span>\n  <span class=\"token keyword\">get</span> <span class=\"token function\">nome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token keyword\">return</span> <span class=\"token string\">\"Gian\"</span> <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">set</span> <span class=\"token function\">nome</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">// Acessador privado</span>\n  get <span class=\"token function\">#idade</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token keyword\">return</span> <span class=\"token number\">19</span> <span class=\"token punctuation\">}</span>\n  set <span class=\"token function\">#idade</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">const</span> objetoDePessoa <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Pessoa</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>objetoDePessoa<span class=\"token punctuation\">.</span>nome<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// \"Gian\"</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>objetoDePessoa<span class=\"token punctuation\">.</span>idade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// undefined</span></code></pre></div>\n<h1>Operadores de Atribuição Lógica</h1>\n<p>Para fechar com chave de ouro: a cereja do bolo!</p>\n<p>Essa feature é animal, ela combina os operadores lógicos (<code class=\"language-text\">&amp;&amp;</code>, <code class=\"language-text\">||</code>, <code class=\"language-text\">??</code>) com atribuição. Parece complexo mas é super simples, bora lá para um exemplo:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">let</span> x <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> y <span class=\"token operator\">=</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\nx <span class=\"token operator\">&amp;&amp;=</span> y<span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 2</span></code></pre></div>\n<blockquote>\n<p>Gian, o que diacho a linha 3 faz?</p>\n</blockquote>\n<p>Vamos lá, haha. Como <code class=\"language-text\">x</code> é um valor válido, ele é atribuído com o valor de <code class=\"language-text\">y</code>, ou seja, 2.</p>\n<p>Então a linha 3 pode ser traduzida para:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  x <span class=\"token operator\">=</span> y\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Muito legal, né?</p>\n<p>Além do <code class=\"language-text\">&amp;&amp;</code>, o mesmo pode ser feito com <code class=\"language-text\">||</code> e <code class=\"language-text\">??</code> (que é o operador de coalescência nula, que checa se o valor é <code class=\"language-text\">null</code> ou <code class=\"language-text\">undefined</code>, bem útil!).</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">let</span> x <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> y <span class=\"token operator\">=</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\nx <span class=\"token operator\">||=</span> y<span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 1</span>\n\n<span class=\"token comment\">// ---------------------------------</span>\n\n<span class=\"token keyword\">let</span> x<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> y <span class=\"token operator\">=</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\nx <span class=\"token operator\">??=</span> y<span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 2</span></code></pre></div>\n<p>Estes exemplos podem ser traduzidos por:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">x <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>x <span class=\"token operator\">=</span> y<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">// ---------------------------------</span>\n\nx <span class=\"token operator\">=</span> x <span class=\"token operator\">??</span> <span class=\"token punctuation\">(</span>x <span class=\"token operator\">=</span> y<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Muito legal, assim conseguimos economizar algumas linhas de código! xD.</p>\n<h1>Conclusão</h1>\n<p>Isso sim que são novas features! Confesso que esperava algumas delas logo no ES2020, mas antes tarde do que nunca, né? </p>\n<p>No post abordei de forma super simplificada algumas features que julguei serem as mais legais. Ainda não temos muito conteúdo pt-br sobre o ES12, então caso você saiba um pouco de inglês eu super recomendo o <a href=\"https://backbencher.dev/javascript/es2021-new-features\">post do Backbencher</a>, nele são citadas e explicadas todas as features. Eu inclusive usei esse material como consulta para esse post, então não esquece de conferir, ok? ;).</p>\n<p>Lembrando que a área de comentários é livre para qualquer discussão sobre o post, então use e abuse dela, fechou?</p>\n<p>Por hoje é só, obrigado por me acompanhar até aqui! Nos vemos semana que vem xD.</p>","timeToRead":3}},"pageContext":{"slug":"/novas-features-do-es2021-es12/","previousPost":{"frontmatter":{"title":"Extensões super hiper legais para VSCode"},"fields":{"slug":"/extensões-super-hiper-legais-para-vscode/"}},"nextPost":{"fields":{"slug":"/git-hooks-com-husky-entendendo-configurando-e-aplicando/"},"frontmatter":{"title":"Git Hooks com Husky: entendendo, configurando e aplicando."}}}},"staticQueryHashes":["1246478059","1873617545","764694655"]}