<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Fábio Garcia Vicente - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Fábio Garcia Vicente - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 03 Jun 2026 21:23:54 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/fabio/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Algoritmos de força bruta explicados ]]>
                </title>
                <description>
                    <![CDATA[ Algoritmos de força bruta são exatamente o que parecem – métodos diretos de resolver um problema que dependem de poder computacional puro e de tentar todas as possibilidades em vez de técnicas avançadas para melhorar a eficiência.  Por exemplo, imagine que você tem um pequeno cadeado com uma combinação ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/algoritmos-de-forca-bruta-explicados/</link>
                <guid isPermaLink="false">62053a05cfef2204db7ed96e</guid>
                
                    <category>
                        <![CDATA[ Algoritmos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fábio Garcia Vicente ]]>
                </dc:creator>
                <pubDate>Sat, 19 Feb 2022 22:35:55 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/5f9c9e20740569d1a4ca3b74.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/brute-force-algorithms-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Brute Force Algorithms Explained</a>
      </p><p>Algoritmos de força bruta são exatamente o que parecem – métodos diretos de resolver um problema que dependem de poder computacional puro e de tentar todas as possibilidades em vez de técnicas avançadas para melhorar a eficiência. </p><p>Por exemplo, imagine que você tem um pequeno cadeado com uma combinação 4 números, cada um deles indo de 0 a 9. Você esquece sua combinação, mas você não quer comprar outro cadeado. Como você não consegue se lembrar de nenhum dos números, precisa usar um método de força bruta para abrir a fechadura.</p><p>Você, então, insere todos os números no cadeado a partir do zero e os experimenta um a um: 0001, 0002, 0003 e assim sucessivamente até que ele abra. Na pior das hipóteses, seriam necessárias 10<sup>4</sup>, ou 10 mil tentativas para encontrar sua combinação.</p><p>Um exemplo clássico em ciência da computação é o problema do caixeiro viajante (TSP). Suponha que um vendedor precisa visitar 10 cidades em todo o país. Como determinar a ordem em que essas cidades devem ser visitadas de modo que a distância total percorrida seja minimizada?</p><p>A solução da força bruta é simplesmente calcular a distância total para toda possibilidade de rota possível e, depois, selecionar a mais curta. Isso não é particularmente eficiente, pois é possível eliminar muitas rotas através algoritmos inteligentes.</p><p>A complexidade de tempo da força bruta é <strong><strong><strong><strong>O(m</strong></strong>n<strong><strong>)</strong></strong></strong></strong>, que às vezes é escrito como <strong><strong>O(n*m)<strong><strong> </strong></strong></strong></strong>. Então, se fôssemos procurar uma string de "n" caracteres em uma string de "m" caracteres usando força bruta, faríamos n * m tentativas.</p><h2 id="mais-informa-es-sobre-algoritmos"><strong>Mais informações sobre algoritmos </strong></h2><p>Na ciência da computação, um algoritmo é simplesmente um conjunto de procedimentos passo a passo para solucionar um dado problema. Algoritmos podem ser projetados para realizar cálculos, processar dados ou realizar tarefas automatizadas de raciocínio. </p><p>Veja como a Wikipédia os define:</p><blockquote>Um algoritmo é um método eficaz que pode ser expresso em uma quantidade finita de espaço e tempo e em uma linguagem formal bem definida para calcular uma função. Partindo de um estado e de uma entrada (talvez vazia) iniciais, as instruções descrevem uma computação que, quando executada, prossegue através de um número finito de estados sucessivos bem definidos, eventualmente produzindo uma "saída" e terminando em um estado final. A transição de um estado para o seguinte não é necessariamente determinista; alguns algoritmos, conhecidos como algoritmos aleatórios, incorporam entradas aleatórias. </blockquote><p>Existem certos requisitos que um algoritmo deve cumprir:</p><ol><li>Definitividade: cada etapa do processo é declarada com precisão.</li><li>Computabilidade efetiva: cada etapa do processo pode ser realizada por um computador.</li><li>Finitude: o programa terminará eventualmente com sucesso.</li></ol><p>Alguns tipos comuns de algoritmos incluem:</p><ul><li>algoritmos de classificação</li><li>algoritmos de pesquisa</li><li>algoritmos de compressão.</li></ul><p>As classes de algoritmos incluem:</p><ul><li>de grafos</li><li>de programação dinâmica</li><li>de ordenação</li><li>de busca</li><li>de cordas (strings)</li><li>matemáticos</li><li>de geometria computacional</li><li>de otimização</li><li>diversas</li></ul><p>Embora tecnicamente não sejam uma classe de algoritmos, as estruturas de dados são frequentemente agrupadas com eles.</p><h3 id="efici-ncia"><strong>Eficiência</strong></h3><p>Os algoritmos são mais comumente julgados por sua eficiência e pela quantidade de recursos de computação necessários para concluir sua tarefa.</p><p>Uma maneira comum de avaliar um algoritmo é observar sua complexidade de tempo. Isso mostra como o tempo de execução do algoritmo aumenta à medida que o tamanho da entrada aumenta. Como os algoritmos de hoje precisam operar em grandes entradas de dados, é essencial que nossos algoritmos tenham um tempo de execução razoavelmente rápido.</p><h3 id="algoritmos-de-ordena-o"><strong>Algoritmos de ordenação</strong></h3><p>Os algoritmos de ordenação são de vários tipos, dependendo de sua necessidade. Alguns, muito comuns e amplamente utilizados, são:</p><h4 id="quicksort-ordena-o-r-pida-"><strong><strong><strong><strong>Quicksort</strong></strong></strong> (</strong>Ordenação rápida)</h4><p>Não há discussão sobre ordenação que possa terminar sem a ordenação rápida. Aqui está o conceito básico (em inglês): <a href="http://me.dt.in.th/page/Quicksort/">Quick Sort</a></p><h4 id="mergesort"><strong><strong><strong><strong>Mergesort</strong></strong></strong></strong></h4><p>Um algoritmo de ordenação que se baseia no conceito de como os arrays ordenados são mesclados para gerar um array ordenado. Leia mais sobre isso aqui (em inglês): <a href="https://www.geeksforgeeks.org/merge-sort/">Mergesort</a></p><p>O currículo do freeCodeCamp enfatiza fortemente a criação de algoritmos. Isso ocorre porque aprender algoritmos é uma boa maneira de praticar suas habilidades em programação. Os entrevistadores geralmente testam os candidatos quanto aos algoritmos durante as entrevistas de emprego para desenvolvedores.</p><h2 id="livros-sobre-algoritmos-em-javascript-em-ingl-s-"><strong>Livros sobre algoritmos em <strong>JavaScript</strong> (em inglês)<strong>:</strong></strong></h2><p></p><p><em>Data Structures in JavaScript</em></p><ul><li>Livro gratuito que cobre as estruturas de dados em JavaScript</li><li><a href="https://www.gitbook.com/book/pmary/data-structure-in-javascript/details">GitBook</a></li></ul><p><em><em>Learning JavaScript Data Structures and Algorithms - Second Edition</em></em></p><ul><li>Trata de programação orientada a objetos, herança prototípica, algoritmos de ordenação e busca, quicksort, mergesort, árvores binárias de busca e conceitos avançados de algoritmos</li><li><a href="https://www.amazon.com/Learning-JavaScript-Data-Structures-Algorithms/dp/1785285491">Amazon</a></li><li>ISBN-13: 978-1785285493</li></ul><p><em><em>Data Structures and Algorithms with JavaScript: Bringing classic computing approaches to the Web</em></em></p><ul><li>Trata de recursão, algoritmos de ordenação e busca, listas vinculadas e árvores binárias de busca.</li><li><a href="https://www.amazon.com/Data-Structures-Algorithms-JavaScript-approaches/dp/1449364934">Amazon</a></li><li>ISBN-13: 978-1449364939</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Convenções de nomenclatura do CSS que evitam horas de depuração ]]>
                </title>
                <description>
                    <![CDATA[ Já ouvi muitos desenvolvedores dizerem que odeiam CSS. Na minha experiência, isso é resultado de não terem tempo de aprender o CSS.  O CSS não é a "linguagem" mais bonita do mundo, mas tem impulsionado com sucesso o estilo da web há mais de 20 anos. Nada mal, hein? ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/convencoes-de-nomenclatura-do-css-que-evitam-horas-de-depuracao/</link>
                <guid isPermaLink="false">61fc032953557304fa19ea6f</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fábio Garcia Vicente ]]>
                </dc:creator>
                <pubDate>Wed, 16 Feb 2022 03:57:15 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/1_YunI3ChUVMlpmFzo75FczQ.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/css-naming-conventions-that-will-save-you-hours-of-debugging-35cea737d849/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Naming Conventions that Will Save You Hours of Debugging</a>
      </p><p>Já ouvi muitos desenvolvedores dizerem que odeiam CSS. Na minha experiência, isso é resultado de não terem tempo de aprender o CSS. </p><p>O CSS não é a "linguagem" mais bonita do mundo, mas tem impulsionado com sucesso o estilo da web há mais de 20 anos. Nada mal, hein?</p><p>Contudo, à medida que você escreve mais CSS, você vê rapidamente uma grande desvantagem. </p><p>É muito difícil manter o CSS.</p><p>CSS mal-escrito rapidamente se transforma em um pesadelo. </p><p>Veja aqui algumas convenções de nomenclatura que salvarão você do estresse e incontáveis horas mais tarde.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/0Nm4l3DA3bWTbPc6C4ViWDqewokYYootpoqb.jpg" class="kg-image" alt="0Nm4l3DA3bWTbPc6C4ViWDqewokYYootpoqb" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/02/0Nm4l3DA3bWTbPc6C4ViWDqewokYYootpoqb.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/02/0Nm4l3DA3bWTbPc6C4ViWDqewokYYootpoqb.jpg 650w" width="650" height="605" loading="lazy"><figcaption>Você já passou por isso, confesse</figcaption></figure><h3 id="usar-strings-delimitadas-por-h-fen"><strong>Usar 'strings' delimitadas por hífen</strong></h3><p>Se você já escreve muito em JavaScript, então certamente usa variáveis em camel case, pois uma prática comum.</p><pre><code>var redBox = document.getElementById('...')</code></pre><p>Ótimo, certo?</p><p>O problema é que esta forma de nomenclatura não é adequada para o CSS. </p><p>Não faça isso:</p><pre><code>.redBox {  border: 1px solid red;}</code></pre><p>Ao invés disso, use:</p><pre><code>.red-box {   border: 1px solid red;}</code></pre><p>Esta é uma convenção de nomenclatura padrão do CSS. É indiscutivelmente mais legível.</p><p>Ela também é consistente com os nomes das propriedades do CSS,</p><pre><code>// Correto</code></pre><pre><code>.some-class {   font-weight: 10em}</code></pre><pre><code>// Incorreto</code></pre><pre><code>.some-class {   fontWeight: 10em}</code></pre><h3 id="a-conven-o-de-nomenclatura-bem"><strong>A convenção de nomenclatura BEM</strong></h3><p>As equipes têm abordagens diferentes para escrever os seletores de CSS. Algumas equipes usam delimitadores com hífen, enquanto outros preferem usar a convenção de nomenclatura mais estruturada, chamada BEM. </p><p>Geralmente, existem 3 problemas que as convenções de nomenclatura do CSS tentam resolver: </p><ol><li>Saber o que um seletor faz, apenas olhando seu nome </li><li>Ter uma ideia sobre onde um seletor pode ser usado, apenas olhando para ele </li><li>Conhecer as relações entre os nomes das classes, apenas olhando para eles. </li></ol><p>Você já viu nomes de classes escritos assim:</p><pre><code>.nav--secondary {  ...}</code></pre><pre><code>.nav__header {  ...}</code></pre><p>Essa é a convenção de nomenclatura BEM.</p><h3 id="explicando-bem-para-uma-crian-a-de-5-anos"><strong>Explicando BEM para uma criança de 5 anos</strong></h3><p>BEM tenta dividir a interface geral do usuário em pequenos componentes reutilizáveis. </p><p>Considere a imagem abaixo: </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/pIFVbUmRtKN8x6DvLHEvJeUSM9Oda8ClkY5f.png" class="kg-image" alt="pIFVbUmRtKN8x6DvLHEvJeUSM9Oda8ClkY5f" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/02/pIFVbUmRtKN8x6DvLHEvJeUSM9Oda8ClkY5f.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/02/pIFVbUmRtKN8x6DvLHEvJeUSM9Oda8ClkY5f.png 800w" sizes="(min-width: 720px) 720px" width="800" height="400" loading="lazy"><figcaption>Esta é uma imagem premiada de um bonequinho de palito :)</figcaption></figure><p>Brincadeira. Não é &nbsp;premiada, infelizmente. :(</p><p>O bonequinho de palito, aqui, representa um componente, como um bloco de design.</p><p>Você já deve ter adivinhado que o B em "BEM" significa "Bloco".</p><p>No mundo real, esse 'bloco' poderia representar um site de navegação, cabeçalho, rodapé, ou qualquer outro bloco de design. </p><p>Seguindo a prática explicada acima, um nome de classe ideal para este componente poderia ser <code>stick-man</code>.</p><p>O componente deveria ser estilizado assim: </p><pre><code>.stick-man {   }</code></pre><p>Usamos strings delimitadas aqui. Isso é bom! </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/ThMVqj-sv26pjpzLJU3MIF2TCdn-S4CjlEZk.png" class="kg-image" alt="ThMVqj-sv26pjpzLJU3MIF2TCdn-S4CjlEZk" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/02/ThMVqj-sv26pjpzLJU3MIF2TCdn-S4CjlEZk.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/02/ThMVqj-sv26pjpzLJU3MIF2TCdn-S4CjlEZk.png 800w" sizes="(min-width: 720px) 720px" width="800" height="400" loading="lazy"></figure><h3 id="e-para-elementos"><strong>E para elementos</strong></h3><p>O E em, "BEM" significa "Elementos". </p><p>Geralmente, blocos de design raramente vivem isolados. </p><p>Por exemplo, o stick-man tem uma <code>head</code> (cabeça), e dois <code>arms</code> e <code>feet</code> (braços e pés, respectivamente) maravilhosos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/bf2jyOzcZ8wgd95I3qR9IS3Cf6pRlQ2hHuGM.png" class="kg-image" alt="bf2jyOzcZ8wgd95I3qR9IS3Cf6pRlQ2hHuGM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/02/bf2jyOzcZ8wgd95I3qR9IS3Cf6pRlQ2hHuGM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/02/bf2jyOzcZ8wgd95I3qR9IS3Cf6pRlQ2hHuGM.png 800w" sizes="(min-width: 720px) 720px" width="800" height="400" loading="lazy"></figure><p><code>head</code>, <code>feet</code> e <code>arms</code> são todos elementos dentro do componente. Eles podem ser visto como componentes filhos, ou seja, filhos do componente pai geral.</p><p>Usando a convenção de nomenclatura BEM, os nomes das classes de elementos derivados são colocados adicionando <strong>duas sublinhas<strong>,</strong> </strong>seguidas do nome do elemento.</p><p>Por exemplo:</p><pre><code>.stick-man__head {</code></pre><pre><code>}</code></pre><pre><code>.stick-man__arms {</code></pre><pre><code>}</code></pre><pre><code>.stick-man__feet {</code></pre><pre><code>}</code></pre><h3 id="m-para-modificadores"><strong>M para Modificadores</strong></h3><p>O M em "BEM" significa "Modificadores". </p><p>E se o boneco fosse modificado e pudéssemos ter um <code>blue</code> ou um <code>red</code>?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/Q-aWWnpw1UuoXxp5NGHxsjP5689VQBT0oGdQ.png" class="kg-image" alt="Q-aWWnpw1UuoXxp5NGHxsjP5689VQBT0oGdQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/02/Q-aWWnpw1UuoXxp5NGHxsjP5689VQBT0oGdQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/02/Q-aWWnpw1UuoXxp5NGHxsjP5689VQBT0oGdQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="400" loading="lazy"><figcaption>Boneco de palitinho azul e boneco de palitinho vermelho</figcaption></figure><p>No mundo real, isso pode ser um botão <code>red</code> ou um botão <code>blue</code>. Estes são modificações dos componentes em questão. </p><p>Usando BEM, os nomes das classes modificadoras são obtidos adicionando dois <strong>hifens</strong>, seguidos do nome do elemento. </p><p>Por exemplo:</p><pre><code>.stick-man--blue {</code></pre><pre><code>}</code></pre><pre><code>.stick-man--red {</code></pre><pre><code>}</code></pre><p>O último exemplo mostrou o componente pai sendo modificado. Esse não é sempre o caso. </p><p>E se tivéssemos dois stick-man com diferentes tamanhos de cabeça?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/ZK-riYJhmFfBVEof6xO8yGGR3O10g2dW7Xqn.png" class="kg-image" alt="ZK-riYJhmFfBVEof6xO8yGGR3O10g2dW7Xqn" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/02/ZK-riYJhmFfBVEof6xO8yGGR3O10g2dW7Xqn.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/02/ZK-riYJhmFfBVEof6xO8yGGR3O10g2dW7Xqn.png 800w" sizes="(min-width: 720px) 720px" width="800" height="400" loading="lazy"><figcaption>Bonecos de palitinho com a cabeça pequena e a cabeça grande, respectivamente</figcaption></figure><p>Desta vez, o elemento foi modificado. Lembre-se de que o elemento é um componente filho dentro do bloco que o contém. </p><p><code>.stick-man</code> representa o bloco, enquanto <code>.stick-man__head</code> representa o elemento.</p><p>Como visto no exemplo acima, o hífen duplo também pode ser usado assim: </p><pre><code>.stick-man__head--small {</code></pre><pre><code>}</code></pre><pre><code>.stick-man__head--big {</code></pre><pre><code>}</code></pre><p>Novamente , observe o uso do hífen duplo no exemplo acima. Ele é usado para denotar um modificador.</p><p>Agora você entendeu. </p><p>Basicamente, é assim que a convenção de nomenclatura BEM trabalha.</p><p>Pessoalmente, eu costumo usar apenas nomes de classes com delimitadores de hífen para projetos simples e uso a BEM para interfaces mais envolvidas.</p><p>Você pode ler mais sobre a BEM.</p><p><strong><a href="http://getbem.com/naming/">BEM - Modificador de elemento em bloco</a></strong></p><p><a href="http://getbem.com/naming/">BEM - O modificador de elemento de bloco é uma metodologia que ajuda você a obter componentes reutilizáveis e compartilhamento de código no<em><em>…</em></em></a><em> </em>(Fonte: <a href="http://getbem.com/naming/" rel="noopener">getbem.com</a>, em inglês)</p><h3 id="por-que-usar-conven-es-de-nomenclatura"><strong>Por que usar convenções de nomenclatura? </strong></h3><blockquote>Existem só dois problemas difíceis na ciência da computação: invalidação de cache e nomeação de objetos — Phil Karlton.</blockquote><p>Nomear objetos é difícil. Tentamos tornar as coisas mais fáceis, economizando tempo no futuro com códigos mais sustentáveis.</p><p>Nomear corretamente em CSS torna seu código fácil de ler e sustentável. </p><p>Se você optar por usar a convenção de nomenclatura BEM, será mais fácil de ver o relação entre seus componentes/blocos de design apenas olhando para a marcação.</p><p>Está se sentindo confiante? </p><h3 id="nome-css-com-hooks-do-javascript"><strong>Nome CSS com 'hooks' do JavaScript </strong></h3><p>Hoje é o primeiro dia de trabalho do John. </p><p>Ele recebe um código em <code>HTML</code> com essa aparência:</p><pre><code>&lt;div class="siteNavigation"&gt;</code></pre><pre><code>&lt;/div&gt;</code></pre><p>John está lendo este artigo e percebe que esta pode não ser a melhor maneira de nomear as coisas em &nbsp;<code>CSS</code>. Então, ele vai em frente e refatora a base de código assim:</p><pre><code>&lt;div class="site-navigation"&gt;</code></pre><pre><code>&lt;/div&gt;</code></pre><p>Parece bom, não?</p><p>Mal sabe John que ele quebrou a base de código!</p><p>Como?</p><p>Em algum lugar no código JavaScript, havia uma relação com o nome da classe anterior, <code>siteNavigation</code>:</p><pre><code>//Código em JavaScript</code></pre><pre><code>const nav = document.querySelector('.siteNavigation')</code></pre><p>Então, com a mudança no nome da classe, a variável <code>nav</code> ficou <code>null</code>.</p><p>Que triste.</p><p>Para evitar casos como estes, os desenvolvedores criaram estratégias diferentes. </p><h4 id="1-usar-nome-de-classes-js-"><strong><strong>1. </strong>Usar nome de classes 'js-'</strong></h4><p>Uma maneira de reduzir esses bugs é usar um nome de classe <code><strong><strong>js-*</strong></strong></code><strong><strong> </strong></strong>para denotar um relacionamento com o elemento do DOM em questão</p><p>Por exemplo:</p><pre><code>&lt;div class="site-navigation js-site-navigation"&gt;</code></pre><pre><code>&lt;/div&gt;</code></pre><p>E, no código, JavaScript:</p><pre><code>//Código em JavaScript</code></pre><pre><code>const nav = document.querySelector('.js-site-navigation')</code></pre><p>Por convenção, qualquer pessoa que veja o nome da classe <code><strong><strong>js-</strong></strong>site-navigation</code> entenderá que existe um relacionamento com esse elemento do DOM no código em JavaScript.</p><h4 id="2-usar-o-atributo-rel-"><strong><strong>2. </strong>Usar o atributo 'Rel'</strong></h4><p>Eu não uso essa técnica, mas já vi outras pessoas usando. </p><p>Você reconhece isso? </p><pre><code>&lt;link rel="stylesheet" type="text/css" href="main.css"&gt;</code></pre><p>Basicamente, o atributo define o relacionamento que o recurso vinculado tem com o documento onde é referenciado. &nbsp;</p><p>No exemplo anterior com John, os defensores dessa técnica fariam isso: </p><pre><code>&lt;div class="site-navigation" rel="js-site-navigation"&gt;</code></pre><pre><code>&lt;/div&gt;</code></pre><p>No JavaScript:</p><pre><code>const nav = document.querySelector("[rel='js-site-navigation']")</code></pre><p>Eu tenho minha dúvidas sobre esta técnica, mas é provável que você a encontre em algumas bases de códigos. &nbsp;A defesa aqui é: <em><em>“</em>bem, há uma relação com o JavaScript, então eu uso o atributo 'Rel' para denotar isso<em>”</em></em>.</p><p>A web é um lugar imenso, com diferentes “métodos” &nbsp;para solucionar o mesmo problema. </p><h4 id="3-n-o-usar-atributos-de-dados"><strong><strong>3. </strong>Não usar atributos de dados</strong></h4><p>Alguns desenvolvedores usam atributos de dados como uma conexão com o JavaScript. Isso não está correto. Por definição, os atributos de dados são usados <strong>para</strong> <strong>armazenar dados personalizados.</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/08r5ESO6cpzZvcZz-KczJEGXtPBtCLorryI6.png" class="kg-image" alt="08r5ESO6cpzZvcZz-KczJEGXtPBtCLorryI6" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/02/08r5ESO6cpzZvcZz-KczJEGXtPBtCLorryI6.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/02/08r5ESO6cpzZvcZz-KczJEGXtPBtCLorryI6.png 800w" sizes="(min-width: 720px) 720px" width="800" height="400" loading="lazy"><figcaption>Uso correto de atributos de dados, como vemos no Twitter</figcaption></figure><p><strong><strong>Edi</strong>ção nº <strong>1: </strong>conforme mencionado por algumas pessoas incríveis na seção de comentários original deste texto, se as pessoas usarem o atributo 'Rel', talvez não haja problema em usar atributos de dados em certos casos. No final, a decisão é sua.</strong></p><h3 id="dica-de-b-nus-escrever-mais-coment-rios-no-css"><strong>Dica de bônus: escrever mais comentários no CSS</strong></h3><p>Isso não tem a ver com convenções de nomenclatura, mas também poupará algum tempo.</p><p>Embora muitos desenvolvedores da Web tentem NÃO escrever comentários em JavaScript ou se ater a alguns, penso que você deveria escrever mais comentários em CSS..</p><p>Como CSS não é a “linguagem” mais elegante, comentários bem estruturados podem economizar tempo quando você está tentando entender seu código.</p><p>Não dói.</p><p>Veja como o código-fonte do Bootstrap é bem-comentado.</p><p>Você não precisa escrever comentários para dizer que <code>color: red</code> dará uma cor vermelha. No entanto, se estiver usando um truque de CSS menos óbvio, sinta-se à vontade para escrever um comentário.</p><h3 id="pronto-para-se-tornar-profissional"><strong>Pronto para se tornar profissional?</strong></h3><p>O autor criou um guia grátis de CSS para que suas habilidades de CSS se destaquem imediatamente. Obtenha o <a href="https://pages.convertkit.com/0c2c62e04a/60e5d19f9b">e-book gratuito aqui</a> (em inglês).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/4AqtYrYGSx6s9Mwmzji1vj8RqwvarVns4y7V.png" class="kg-image" alt="4AqtYrYGSx6s9Mwmzji1vj8RqwvarVns4y7V" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/02/4AqtYrYGSx6s9Mwmzji1vj8RqwvarVns4y7V.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/02/4AqtYrYGSx6s9Mwmzji1vj8RqwvarVns4y7V.png 800w" sizes="(min-width: 720px) 720px" width="800" height="533" loading="lazy"><figcaption>Tradução do título: "Sete segredos sobre o CSS que você não conhecia"</figcaption></figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como implementar uma lista vinculada em JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Se você está aprendendo estruturas de dados, uma lista vinculada é uma estrutura de dados que você deve conhecer. Se você realmente não a entende ou como ela é implementada em JavaScript, este artigo está aqui para ajudar você.  Neste artigo, discutiremos o que é uma lista vinculada, como ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-implementar-uma-lista-vinculada-em-javascript/</link>
                <guid isPermaLink="false">61fbafb453557304fa19e77a</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fábio Garcia Vicente ]]>
                </dc:creator>
                <pubDate>Fri, 04 Feb 2022 17:29:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/5f9c9a86740569d1a4ca2622.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/implementing-a-linked-list-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Implement a Linked List in JavaScript</a>
      </p><p>Se você está aprendendo estruturas de dados, uma lista vinculada é uma estrutura de dados que você deve conhecer. Se você realmente não a entende ou como ela é implementada em JavaScript, este artigo está aqui para ajudar você. </p><p>Neste artigo, discutiremos o que é uma lista vinculada, como ela é diferente de um array e como implementá-la em JavaScript. Vamos começar.</p><h2 id="o-que-uma-lista-vinculada"><strong>O que é uma lista vinculada<strong>?</strong></strong></h2><p><br>Uma lista vinculada é uma estrutura de dados linear semelhante a um array. No entanto, ao contrário dos arrays, os elementos não são armazenados em um local da memória ou índice. Em vez disso, cada elemento é um objeto separado, que contém um ponteiro ou um link para o próximo objeto dessa lista. </p><p>Cada elemento (comumente chamado de nó) contém dois itens: os dados armazenados e um link para o próximo nó. Os dados podem ser qualquer tipo de dados válido. Você pode ver isso ilustrado no diagrama abaixo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/Group_14_5_bvpwu0.png" class="kg-image" alt="Group_14_5_bvpwu0" width="442" height="99" loading="lazy"></figure><p>O ponto de entrada para uma lista vinculada é chamado de head (cabeça/cabeçalho). Head é uma referência ao primeiro nó na lista vinculada. O último nó da lista aponta para null. Se a lista estiver vazia, head é uma referência nula. </p><p>Em JavaScript, uma lista vinculada pode ter a seguinte aparência: </p><pre><code class="language-js">const list = {
    head: {
        value: 6
        next: {
            value: 10                                             
            next: {
                value: 12
                next: {
                    value: 3
                    next: null	
                    }
                }
            }
        }
    }
};</code></pre><h2 id="uma-vantagem-das-listas-vinculadas"><strong>Uma vantagem das listas vinculadas </strong></h2><ul><li>Os nós podem ser facilmente removidos de ou adicionados a uma lista vinculada sem reorganizar toda a estrutura de dados. Esta é uma vantagem que elas tem sobre os arrays.</li></ul><h2 id="desvantagens-das-listas-vinculadas"><strong>Desvantagens das listas vinculadas </strong></h2><p>As operações de pesquisa são lentas em listas vinculadas. Ao contrário dos arrays, o acesso aleatório aos dados dos elementos não é permitido. Os nós são acessados sequencialmente a partir do primeiro nó.</p><p>Elas também usam mais memória do que os arrays por causa do armazenamento dos ponteiros. </p><h2 id="tipos-de-listas-vinculadas"><strong>Tipos de listas vinculadas </strong></h2><p>Existem três tipos de listas vinculadas:</p><ul><li><strong>Listas vinculadas individualmente</strong> : Cada nó contém apenas um ponteiro para o próximo nó. É disso que falamos até agora.</li><li><strong>Listas duplamente vinculadas</strong> : Cada nó contém dois ponteiros, um ponteiro para o próximo nó e um ponteiro para o nó anterior.</li><li><strong>Listas vinculadas circulares</strong> : A lista vinculada circular é uma variação de uma lista vinculada na qual o último nó aponta para o primeiro nó ou qualquer outro nó anterior, formando um laço.</li></ul><h2 id="implementando-um-n-da-lista-em-javascript">Implementando um nó da lista em JavaScript</h2><p>Como afirmado anteriormente, um nó da lista contém dois itens: os dados e o ponteiro para o próximo nó. Podemos implementar um nó de lista em JavaScript da seguinte maneira:</p><pre><code class="language-js">class ListNode {
    constructor(data) {
        this.data = data
        this.next = null                
    }
}</code></pre><h2 id="implementando-uma-lista-vinculada-em-javascript">Implementando uma lista vinculada em JavaScript</h2><p>O código abaixo mostra a implementação de uma classe de lista vinculada com um construtor. Observe que, se o nó principal não for passado, ele será inicializado como nulo.</p><pre><code class="language-js">class LinkedList {
    constructor(head = null) {
        this.head = head
    }
}</code></pre><h2 id="juntando-tudo">Juntando tudo</h2><p>Vamos criar uma lista vinculada com a classe que acabamos de criar. Primeiro, criamos dois nós da lista, <code>node1</code> e <code>node2</code>, e um ponteiro do nó 1 para o nó 2. </p><pre><code class="language-js">let node1 = new ListNode(2)
let node2 = new ListNode(5)
node1.next = node2</code></pre><p>Em seguida, criaremos uma lista vinculada com o <code>node1</code>.</p><pre><code class="language-js">let list = new LinkedList(node1)</code></pre><p>Vamos tentar acessar os nós na lista que acabamos de criar.</p><pre><code class="language-js">console.log(list.head.next.data) //retorna 5</code></pre><h2 id="alguns-m-todos-das-listas-vinculadas">Alguns métodos das listas vinculadas</h2><p>Em seguida, implementaremos quatro métodos auxiliares para a lista vinculada. Eles são:</p><ol><li>size()</li><li>clear()</li><li>getLast()</li><li>getFirst()</li></ol><h3 id="1-size-ou-tamanho-"><strong><strong>1. size()</strong> (ou tamanho)</strong></h3><p>Este método retorna o número de nós presentes na lista vinculada.</p><pre><code class="language-js">size() {
    let count = 0; 
    let node = this.head;
    while (node) {
        count++;
        node = node.next
    }
    return count;
}
</code></pre><h3 id="2-clear-ou-limpar-"><strong><strong>2. clear()</strong> (ou limpar)</strong></h3><p>Este método esvazia a lista.</p><pre><code class="language-js">clear() {
    this.head = null;
}</code></pre><h3 id="3-getlast-ou-obter-o-ltimo-"><strong><strong>3. getLast()</strong> (ou obter o último)</strong></h3><p>Este método retorna o último nó da lista vinculada.</p><pre><code class="language-js">getLast() {
    let lastNode = this.head;
    if (lastNode) {
        while (lastNode.next) {
            lastNode = lastNode.next
        }
    }
    return lastNode
}</code></pre><h3 id="4-getfirst-ou-obter-o-primeiro-"><strong><strong>4. getFirst()</strong> (ou obter o primeiro)</strong></h3><p>Este método retorna o primeiro nó da lista vinculada.</p><pre><code class="language-js">getFirst() {
    return this.head;
}</code></pre><h3 id="sum-rio">Sumário</h3><p>Neste artigo, discutimos o que é uma lista vinculada e como ela pode ser implementada em JavaScript. Também discutimos os diferentes tipos de listas vinculadas e suas vantagens e desvantagens.</p><p>Espero que tenham gostado de ler.</p><p><em>Deseja ser notificado quando a autora publicar um novo artigo? <a href="https://mailchi.mp/69ea601a3f64/join-sarahs-mailing-list" rel="noopener noreferrer">Clique aqui</a>.</em></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
