<?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[ Eduardo de Oliveira Machado - 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[ Eduardo de Oliveira Machado - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 19:22:13 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/eduardo-de-oliveira-machado/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Uma breve introdução à arquitetura limpa ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Daniel Deutsch Em um projeto de código aberto [https://github.com/Keep-Current] para o qual comecei a contribuir, o conceito de "arquitetura limpa" me foi apresentando. No começo, era demais para se entender. Após um pouco de leitura, no entanto, passou a fazer sentido. Acho que será de ajuda a outros ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/uma-breve-introducao-a-arquitetura-limpa/</link>
                <guid isPermaLink="false">63ed06a758018c06027bf24f</guid>
                
                    <category>
                        <![CDATA[ Design para a Web ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Eduardo de Oliveira Machado ]]>
                </dc:creator>
                <pubDate>Tue, 18 Apr 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/0_vIfjwJFIvgfyghgD.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/a-quick-introduction-to-clean-architecture-990c014448d2/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">A quick introduction to clean architecture</a>
      </p><p>Escrito por: Daniel Deutsch</p><p>Em um <a href="https://github.com/Keep-Current">projeto de código aberto</a> para o qual comecei a contribuir, o conceito de "arquitetura limpa" me foi apresentando.</p><p>No começo, era demais para se entender. Após um pouco de leitura, no entanto, passou a fazer sentido. Acho que será de ajuda a outros se eu escrever meus aprendizados.</p><h3 id="tabela-de-conte-dos"><strong>Tabela de conteúdos</strong></h3><ul><li><a href="https://github.com/Createdd/Writing/blob/master/2018/articles/CleanA.md#visual-representations" rel="noopener">Representações visuais</a></li><li><a href="https://github.com/Createdd/Writing/blob/master/2018/articles/CleanA.md#the-concept---presented-in-bullet-points" rel="noopener">O conceito – apresentado em tópicos</a></li><li><a href="https://github.com/Createdd/Writing/blob/master/2018/articles/CleanA.md#code-example" rel="noopener">Código de exemplo</a></li><li><a href="https://github.com/Createdd/Writing/blob/master/2018/articles/CleanA.md#resources" rel="noopener">Recursos</a></li></ul><h3 id="representa-es-visuais"><strong>Representações visuais</strong></h3><p>Eu acho que sempre é bom começar com um pouco de visualização.</p><p>Aqui estão as imagens mais comuns deste conceito.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/oVVbTLR5gXHgP8Ehlz1qzRm5LLjX9kv2Zri6.jpg" class="kg-image" alt="oVVbTLR5gXHgP8Ehlz1qzRm5LLjX9kv2Zri6" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/oVVbTLR5gXHgP8Ehlz1qzRm5LLjX9kv2Zri6.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/oVVbTLR5gXHgP8Ehlz1qzRm5LLjX9kv2Zri6.jpg 772w" sizes="(min-width: 720px) 720px" width="772" height="567" loading="lazy"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/YsN6twE3-4Q4OYpgxoModmx29I8zthQ3f0OR.jpg" class="kg-image" alt="YsN6twE3-4Q4OYpgxoModmx29I8zthQ3f0OR" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/YsN6twE3-4Q4OYpgxoModmx29I8zthQ3f0OR.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/YsN6twE3-4Q4OYpgxoModmx29I8zthQ3f0OR.jpg 772w" sizes="(min-width: 720px) 720px" width="772" height="567" loading="lazy"><figcaption>Fonte e créditos: <a href="https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html" rel="noopener">https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html</a> .<a href="https://www.codingblocks.net/podcast/clean-architecture-make-your-architecture-scream/" rel="noopener">https://www.codingblocks.net/podcast/clean-architecture-make-your-architecture-scream/</a></figcaption></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/lbexLhWvRfpexSV0lSIWczkHd5KdszeDy9a3.png" class="kg-image" alt="lbexLhWvRfpexSV0lSIWczkHd5KdszeDy9a3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/lbexLhWvRfpexSV0lSIWczkHd5KdszeDy9a3.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/lbexLhWvRfpexSV0lSIWczkHd5KdszeDy9a3.png 800w" sizes="(min-width: 720px) 720px" width="800" height="600" loading="lazy"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/YIABVRTHRz58ZiT6W-emBkfNIQUHBelp8t6U.png" class="kg-image" alt="YIABVRTHRz58ZiT6W-emBkfNIQUHBelp8t6U" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/YIABVRTHRz58ZiT6W-emBkfNIQUHBelp8t6U.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/YIABVRTHRz58ZiT6W-emBkfNIQUHBelp8t6U.png 800w" sizes="(min-width: 720px) 720px" width="800" height="600" loading="lazy"><figcaption>Fonte e créditos: Mattia Battiston, sob a licença Creative Commons BY 4.0, <a href="https://github.com/mattia-battiston/clean-architecture-example" rel="noopener">https://github.com/mattia-battiston/clean-architecture-example</a></figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/TmSQbZOg5bxn0cRXxIrRUd2zhqeDAXTe8ni5.jpg" class="kg-image" alt="TmSQbZOg5bxn0cRXxIrRUd2zhqeDAXTe8ni5" width="405" height="453" loading="lazy"><figcaption>Fonte e créditos: <a href="https://marconijr.com/posts/clean-architecture-practice/" rel="noopener">https://marconijr.com/posts/clean-architecture-practice/</a></figcaption></figure><h3 id="o-conceito-apresentado-em-t-picos"><strong>O conceito — apresentado em tópicos</strong></h3><p>Estendido da fonte e créditos: <a href="https://github.com/mattia-battiston/clean-architecture-example" rel="noopener">Mattia Battiston, sob a licença Creative Commons BY 4.0</a></p><h4 id="o-valor-que-pode-entregar"><strong>O valor que pode entregar</strong></h4><ul><li>Uma estratégia de teste eficaz que segue a pirâmide de testes</li><li>Frameworks são isolados em módulos individuais. Quando mudarmos de ideia, só precisamos mudar uma coisa em um lugar. A aplicação tem casos de uso em vez de estar vinculada a um sistema de CRUD</li><li>Arquitetura gritante, ou seja, ela grita seu uso pretendido. Ao olhar para a estrutura, você tem uma ideia do que a aplicação faz, em vez de ver detalhes técnicos</li><li>Toda a lógica de negócios está em um caso de uso. Por isso, é fácil de encontrar e não é duplicada em nenhum outro lugar</li><li>É difícil fazer a coisa errada, porque os módulos impõem dependências de compilação. Se você tentar usar algo que não deveria, o app não compilará</li><li>Sempre pronta para ser implantada, deixando as conexões do objeto para o final. Também é possível usar <em>flags</em> de recursos para obter todos os benefícios da integração contínua</li><li>Vários trabalhos em histórias para que pares diferentes possam trabalhar facilmente na mesma história ao mesmo tempo para concluí-la mais rapidamente</li><li>Um bom monolito com casos de uso claros que você pode dividir em microsserviços mais tarde, depois de aprender mais sobre eles</li></ul><h4 id="entidades"><strong>Entidades</strong></h4><ul><li>Representam os objetos do domínio</li><li>Aplicam somente lógica que é aplicável em geral à entidade inteira (exemplo: validar o formato do nome de um host)</li><li>Objetos simples: sem frameworks, sem anotações</li></ul><h4 id="casos-de-uso"><strong>Casos de uso</strong></h4><ul><li>Representam suas ações de negócio: é o que você pode fazer com a aplicação. Espere um caso de uso para cada ação de negócios</li><li>Lógica de negócios pura, código simples (exceto talvez algumas bibliotecas de utilitários)</li><li>O caso de uso não sabe quem o acionou e como os resultados serão apresentados (por exemplo, pode ser em uma página da web, retornado como JSON ou simplesmente registrado e assim por diante).</li><li>Lançam exceções de negócio</li></ul><h4 id="interfaces-adaptadores"><strong>Interfaces/adaptadores</strong></h4><ul><li>Recuperam e armazenam dados de e para várias fontes (banco de dados, dispositivos de rede, sistema de arquivos, terceiros e assim por diante).</li><li>Definem interfaces para os dados que eles precisam para aplicar alguma lógica. Um ou mais provedores de dados implementarão a interface, mas o caso de uso não sabe de onde vêm os dados</li><li>Implementam as interfaces definidas pelo caso de uso</li><li>Existem maneiras de interagir com a aplicação e, geralmente, envolvem um mecanismo de entrega (por exemplo, APIs REST, trabalhos agendados, GUI, outros sistemas)</li><li>Acionam um caso de uso e convertem o resultado em um formato adequado para o mecanismo de entrega</li><li>São o <em>controller</em> em um MVC</li></ul><h4 id="interfaces-externas"><strong>Interfaces externas</strong></h4><ul><li>Use qualquer estrutura que seja mais apropriada (elas serão isoladas aqui, de qualquer maneira)</li></ul><h3 id="c-digo-de-exemplo"><strong>Código de exemplo</strong></h3><p>Veja este exemplo no <a href="https://github.com/Createdd/web-miner/tree/master/webminer" rel="noopener">GitHub</a>.</p><p>Em primeiro lugar, é importante entender que a arquitetura limpa é um conjunto de princípios de organização. Portanto, tudo está aberto a ajustes pessoais, desde que as ideias centrais sejam mantidas intactas. O repositório vinculado é um <em>fork </em>do projeto original que trouxe essa ideia de design de arquitetura para mim. Sinta-se à vontade para conferir o projeto original também, pois ele reflete outras melhorias.</p><p>O diretório <em>webminer </em>é estruturado nas camadas básicas:</p><ol><li>entities</li><li>use_cases</li><li>interfaces_adapters</li><li>external_interfaces</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/FSvBm5GdWA0uMo6NJhyOoF2hgJt8s1Bv3n1v.png" class="kg-image" alt="FSvBm5GdWA0uMo6NJhyOoF2hgJt8s1Bv3n1v" width="464" height="726" loading="lazy"><figcaption>Estrutura do diretório <em>webminer</em></figcaption></figure><p>Deve refletir a abordagem básica para o padrão de projeto.</p><ul><li>Começando em <code>entities</code>, você pode ver que o modelo central deste projeto é o <code>arxiv_document</code></li><li>A próxima pasta, <code>use_cases</code>, mostra nosso caso de uso – especificamente, requisitar a página <code>arxiv</code></li><li>Depois disso, passamos pela pasta <code>interface_adapters</code> que providencia adaptadores para processos de requisição em uma aplicação REST ou para serialização</li><li>A última camada é a <code>external_interfaces</code>. Aqui é onde usamos o servidor <code>flask</code> para implementar a funcionalidade REST</li></ul><p>Todas essas camadas dependem das camadas centrais, mas não o contrário.</p><p><strong>Uma observação importante:<strong> </strong>isso não está<strong> implement</strong>a<strong>d</strong>o de modo totalmente correto no repositório.</strong></p><p>Por quê? Porque os casos de uso são realmente diferentes. Na realidade, o principal caso de uso é fornecer os dados estruturados. Outro caso de uso é obter os dados da página arxiv.</p><p>Você notou esse erro na arquitetura? Se notou, parabéns! Você não apenas veio a este artigo com bastante curiosidade, mas, provavelmente, entendeu os princípios bem o suficiente para construir seu próprio caso e aplicar os conceitos na realidade!</p><p>Você concorda? Se não, por quê? Obrigado pela leitura do meu artigo!</p><h3 id="recursos"><strong>Recursos</strong></h3><p>Aqui estão alguns artigos que considerei úteis para entender o conceito de "arquitetura limpa" (textos em inglês):</p><ul><li><a href="https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html" rel="noopener">https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html</a></li><li><a href="https://www.codingblocks.net/podcast/clean-architecture-make-your-architecture-scream/" rel="noopener">https://www.codingblocks.net/podcast/clean-architecture-make-your-architecture-scream/</a></li><li><a href="https://github.com/mattia-battiston/clean-architecture-example" rel="noopener">https://github.com/mattia-battiston/clean-architecture-example</a></li><li><a href="https://medium.com/@tiagoflores_23976/how-choose-the-appropriate-ios-architecture-mvc-mvp-mvvm-viper-or-clean-architecture-2d1e9b87d48" rel="noopener">https://medium.com/@tiagoflores_23976/how-choose-the-appropriate-ios-architecture-mvc-mvp-mvvm-viper-or-clean-architecture-2d1e9b87d48</a></li><li><a href="https://de.slideshare.net/HimanshuDudhat1/mvp-clean-architecture" rel="noopener">https://de.slideshare.net/HimanshuDudhat1/mvp-clean-architecture</a></li><li><a href="https://softwareengineering.stackexchange.com/questions/336677/what-is-the-difference-between-mvp-and-clean-architecture" rel="noopener">https://softwareengineering.stackexchange.com/questions/336677/what-is-the-difference-between-mvp-and-clean-architecture</a></li><li><a href="https://engineering.21buttons.com/clean-architecture-in-django-d326a4ab86a9" rel="noopener">https://engineering.21buttons.com/clean-architecture-in-django-d326a4ab86a9</a></li><li><a href="https://gist.github.com/ygrenzinger/14812a56b9221c9feca0b3621518635b" rel="noopener">https://gist.github.com/ygrenzinger/14812a56b9221c9feca0b3621518635b</a></li><li><a href="https://medium.freecodecamp.org/how-to-write-robust-apps-consistently-with-the-clean-architecture-9bdca93e17b" rel="noopener">https://medium.freecodecamp.org/how-to-write-robust-apps-consistently-with-the-clean-architecture-9bdca93e17b</a></li><li><a href="https://marconijr.com/posts/clean-architecture-practice/" rel="noopener">https://marconijr.com/posts/clean-architecture-practice/</a></li></ul><p>Daniel Deutsch é mestrando em direito comercial, trabalha como engenheiro de software e é organizador de eventos relacionados à tecnologia em Viena. Seus esforços atuais de aprendizado pessoal se concentram em aprendizagem de máquina.</p><p>Siga o autor em suas redes sociais:</p><ul><li><a href="https://www.linkedin.com/in/createdd" rel="noopener">LinkedIn</a></li><li><a href="https://github.com/Createdd" rel="noopener">Github</a></li><li><a href="https://medium.com/@ddcreationstudi" rel="noopener">Medium</a></li><li><a href="https://twitter.com/_createdd" rel="noopener">Twitter</a></li><li><a href="https://steemit.com/@createdd" rel="noopener">Steemit</a></li><li><a href="https://hashnode.com/@DDCreationStudio" rel="noopener">Hashnode</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Três maneiras de encontrar a maior palavra em uma string em JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Este artigo é baseado no desafio de algoritmos "Encontre a maior palavra em uma string", do FreeCodeCamp. Neste algoritmo, queremos verificar cada palavra e contar quantas letras há em cada uma. Depois disso, comparamos as contagens para determinar qual palavra tem mais caracteres e retornamos o comprimento da maior palavra. ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/tres-maneiras-de-encontrar-a-maior-palavra-em-uma-string-em-javascript/</link>
                <guid isPermaLink="false">637e5ca2e2dc4305dbdcfde4</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Eduardo de Oliveira Machado ]]>
                </dc:creator>
                <pubDate>Thu, 09 Feb 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/01/1_k2RZZ3j1e-_r9Av7SgzFDw.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/three-ways-to-find-the-longest-word-in-a-string-in-javascript-a2fb04c9757c/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Three Ways to Find the Longest Word in a String in JavaScript</a>
      </p><p>Este artigo é baseado no desafio de algoritmos<em> "</em>Encontre a maior palavra em uma string<em>", </em>do <em><em>FreeCodeCamp.</em></em></p><p><strong>Neste algoritmo</strong>, queremos verificar cada palavra e contar quantas letras há em cada uma. Depois disso, comparamos as contagens para determinar qual palavra tem mais caracteres e retornamos o comprimento da maior palavra.</p><p>Neste artigo, vou explicar três abordagens. A primeira usará um laço FOR, a segunda usará o método sort() e a terceira usará o método reduce().</p><h4 id="desafio-de-algoritmos"><strong>Desafio de algoritmos</strong></h4><blockquote>Retorne o comprimento da maior palavra na frase selecionada.<br><br>Sua resposta deve ser um número.</blockquote><h4 id="casos-de-testes-fornecidos"><strong><em>Casos de testes fornecidos</em></strong></h4><ul><li><strong><strong><em><em>findLongestWord(</em></em></strong><em>"</em><strong><em><em>The quick brown fox jumped over the lazy dog</em></em></strong><em>"</em><strong><em><em>)</em></em> </strong></strong>deve retornar um número</li><li><strong><strong><em><em>findLongestWord(</em></em></strong><em>"</em><strong><em><em>The quick brown fox jumped over the lazy dog</em></em></strong><em>"</em><strong><em><em>)</em></em></strong></strong> deve retornar 6</li><li><strong><strong><em><em>findLongestWord(</em></em></strong><em>"</em><strong><em><em>May the force be with you</em></em></strong><em>"</em><strong><em><em>)</em></em></strong></strong> deve retornar 5</li><li><strong><strong><em><em>findLongestWord(</em></em></strong><em>"</em><strong><em><em>Google do a barrel roll</em></em></strong><em>"</em><strong><em><em>)</em></em></strong></strong> deve retornar 6</li><li><strong><strong><em><em>findLongestWord(</em></em></strong><em>"</em><strong><em><em>What is the average airspeed velocity of an unladen swallow</em></em></strong><em>"</em><strong><em><em>)</em></em></strong></strong> deve retornar 8</li><li><strong><strong><em><em>findLongestWord(</em></em></strong><em>"</em><strong><em><em>What if we try a super-long word such as otorhinolaryngology</em></em></strong><em>"</em><strong><em><em>)</em></em></strong></strong><em><em> </em>deve retornar</em> 19</li></ul><pre><code class="language-js">function findLongestWord(str) {
  return str.length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");</code></pre><h3 id="1-encontrar-a-maior-palavra-com-um-la-o-for"><strong>1. Encontrar a maior palavra com um laço FOR</strong></h3><p>Para esta solução, usaremos o método String.prototype.split()</p><p>O método <strong><strong>split()</strong></strong> divide um objeto de string em um array de strings, separando-as em substrings.</p><p>Vamos precisar adicionar um espaço em branco entre os parênteses do método <strong><strong>split()</strong></strong>,</p><pre><code>var strSplit = "The quick brown fox jumped over the lazy dog".split(' ');</code></pre><p>que gerará como saída um array de palavras separadas:</p><pre><code>var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];</code></pre><p>Se você não adicionar o espaço entre os parênteses, você obterá essa saída:</p><pre><code>var strSplit = 
["T", "h", "e", " ", "q", "u", "i", "c", "k", " ", "b", "r", "o", "w", "n", " ", "f", "o", "x", " ", "j", "u", "m", "p", "e", "d", " ", "o", "v", "e", "r", " ", "t", "h", "e", " ", "l", "a", "z", "y", " ", "d", "o", "g"];</code></pre><pre><code class="language-js">function findLongestWord(str) {
  // Passo 1. Dividir a string em um array de strings
  var strSplit = str.split(' ');
  // var strSplit = "The quick brown fox jumped over the lazy dog".split(' ');
  // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];
	
  // Passo 2. Iniciar uma variável que contenha o tamanho da maior palavra
  var longestWord = 0;

  // Passo 3. Criar o laço FOR
  for(var i = 0; i &lt; strSplit.length; i++){
    if(strSplit[i].length &gt; longestWord){ // Se strSplit[i].length for maior do que a palavra com a qual ela se compara...
	longestWord = strSplit[i].length; // ...longestWord recebe esse novo valor
     }
  }
  /* Aqui, strSplit.length = 9
     Para cada iteração: i = ?   i &lt; strSplit.length?   i++  if(strSplit[i].length &gt; longestWord)?   longestWord = strSplit[i].length
     1a iteração:        0             sim             1   if("The".length &gt; 0)? =&gt; if(3 &gt; 0)?     longestWord = 3
     2a iteração:        1             sim             2   if("quick".length &gt; 3)? =&gt; if(5 &gt; 3)?   longestWord = 5   
     3a iteração:        2             sim             3   if("brown".length &gt; 5)? =&gt; if(5 &gt; 5)?   longestWord = 5   
     4a iteração:        3             sim             4   if("fox".length &gt; 5)? =&gt; if(3 &gt; 5)?     longestWord = 5  
     5a iteração:        4             sim             5   if("jumped".length &gt; 5)? =&gt; if(6 &gt; 5)?  longestWord = 6 
     6a iteração:        5             sim             6   if("over".length &gt; 6)? =&gt; if(4 &gt; 6)?    longestWord = 6 
     7a iteração:        6             sim             7   if("the".length &gt; 6)? =&gt; if(3 &gt; 6)?     longestWord = 6
     8a iteração:        7             sim             8   if("lazy".length &gt; 6)? =&gt; if(4 &gt; 6)?    longestWord = 6 
     9a iteração:        8             sim             9   if("dog".length &gt; 6)? =&gt; if(3 &gt; 6)?     longestWord = 6 
     10a iteração:       9             não               
     Fim do laço FOR*/

  //Passo 4. Retornar o tamanho da maior palavra
  return longestWord; // 6
}

findLongestWord("The quick brown fox jumped over the lazy dog");</code></pre><h4 id="sem-coment-rios-"><strong>Sem comentários:</strong></h4><pre><code class="language-js">function findLongestWord(str) {
  var strSplit = str.split(' ');
  var longestWord = 0;
  for(var i = 0; i &lt; strSplit.length; i++){
    if(strSplit[i].length &gt; longestWord){
	longestWord = strSplit[i].length;
     }
  }
  return longestWord;
}
findLongestWord("The quick brown fox jumped over the lazy dog");</code></pre><h3 id="2-encontrar-a-maior-palavra-com-o-m-todo-sort-"><strong>2. Encontrar a maior palavra com o método sort()</strong></h3><p>Para esta solução, usaremos o método Array.prototype.sort() para ordenar o array por algum critério e retornaremos o tamanho do primeiro elemento do array.</p><ul><li>O método <strong><strong>sort()</strong></strong> orderna os elementos em um array <em>na hora </em>e, então, o retorna.</li></ul><p>No nosso caso, se apenas ordenarmos o array:</p><pre><code>var sortArray = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"].sort();</code></pre><p>a saída será:</p><pre><code>var sortArray = ["The", "brown", "dog", "fox", "jumped", "lazy", "over", "quick", "the"];</code></pre><p>Em Unicode, números vêm antes de letras maiúsculas, e essas últimas vêm antes das letras minúsculas.</p><p>Precisamos de algum critério para ordenar os elementos:</p><pre><code>[].sort(function(firstElement, secondElement) {     return secondElement.length — firstElement.length; })</code></pre><p>Esse critério será comparar o comprimento do segundo elemento com o do primeiro.</p><pre><code class="language-js">function findLongestWord(str) {
  // Passo 1. Dividir a string em um array de strings
  var strSplit = str.split(' ');
  // var strSplit = "The quick brown fox jumped over the lazy dog".split(' ');
  // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];
  
  // Passo 2. Ordenar os elementos no array
  var longestWord = strSplit.sort(function(a, b) { 
    return b.length - a.length;
  });
  /* Processo de ordenação
    a           b            b.length     a.length     var longestWord
  "The"      "quick"            5            3         ["quick", "The"]
  "quick"    "brown"            5            5         ["quick", "brown", "The"]  
  "brown"    "fox"              3            5         ["quick", "brown", "The", "fox"]
  "fox"      "jumped"           6            3         ["jumped", quick", "brown", "The", "fox"]
  "jumped"   "over"             4            6         ["jumped", quick", "brown", "over", "The", "fox"]
  "over"     "the"              3            4         ["jumped", quick", "brown", "over", "The", "fox", "the"]
  "the"      "lazy"             4            3         ["jumped", quick", "brown", "over", "lazy", "The", "fox", "the"]
  "lazy"     "dog"              3            4         ["jumped", quick", "brown", "over", "lazy", "The", "fox", "the", "dog"]
  */
  
  // Step 3. Retornar o tamanho do rprimeiro elemento do array
  return longestWord[0].length; // var longestWord = ["jumped", "quick", "brown", "over", "lazy", "The", "fox", "the", "dog"];
                                // longestWord[0]="jumped" =&gt; jumped".length =&gt; 6
}

findLongestWord("The quick brown fox jumped over the lazy dog");</code></pre><h4 id="sem-coment-rios--1"><strong>Sem comentários:</strong></h4><pre><code class="language-js">function findLongestWord(str) {
  var longestWord = str.split(' ').sort(function(a, b) { return b.length - a.length; });
  return longestWord[0].length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");</code></pre><h3 id="3-encontrar-a-maior-palavra-com-o-m-todo-reduce-"><strong>3. Encontrar a maior palavra com o método reduce()</strong></h3><p>Para esta solução, usaremos o método Array.prototype.reduce().</p><ul><li>O método <strong><strong>reduce()</strong></strong> aplica a função com um acumulador e cada valor do array (da esquerda para a direita) para reduzi-lo a um único valor.</li></ul><p>reduce() executa uma função de <em>callback </em>uma vez para cada elemento do array.</p><p>Você pode providenciar um valor inicial como o segundo parâmetro a reduzir. Aqui, adicionaremos uma string vazia "".</p><pre><code>[].reduce(function(previousValue, currentValue) {...}, "");</code></pre><pre><code class="language-js">function findLongestWord(str) {
  // Passo 1. Dividir a string em um array de strings
  var strSplit = str.split(' ');
  // var strSplit = "The quick brown fox jumped over the lazy dog".split(' ');
  // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];

  // Step 2. Usar o método reduce
  var longestWord = strSplit.reduce(function(longest, currentWord) {
    if(currentWord.length &gt; longest.length)
       return currentWord;
    else
       return longest;
  }, "");
  
  /* Processo de reduce
  currentWord      longest       currentWord.length     longest.length    if(currentWord.length &gt; longest.length)?   var longestWord
  "The"             ""                  3                     0                              yes                          "The"
  "quick"           "The"               5                     3                              yes                         "quick"
  "brown"           "quick"             5                     5                              no                          "quick"
  "fox"             "quick"             3                     5                              no                          "quick"
  "jumped"          "quick"             6                     5                              yes                         "jumped"
  "over"            "jumped"            4                     6                              no                          "jumped"
  "the"             "jumped"            3                     6                              no                          "jumped"
  "lazy"            "jumped"            4                     6                              no                          "jumped"
  "dog"             "jumped"            3                     6                              no                          "jumped"
  */
  
  // Passo 3. Retornar o tamanho de longestWord
  return longestWord.length; // var longestWord = "jumped" 
                             // longestWord.length =&gt; "jumped".length =&gt; 6
}

findLongestWord("The quick brown fox jumped over the lazy dog");</code></pre><h4 id="sem-coment-rios--2"><strong>Sem comentários:</strong></h4><pre><code class="language-js">function findLongestWord(str) {
  var longestWord = str.split(' ').reduce(function(longest, currentWord) {
    return currentWord.length &gt; longest.length ? currentWord : longest;
  }, "");
  return longestWord.length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");</code></pre><p>Espero que este artigo tenha sido útil. Ele é parte da minha série de artigos "Como resolver os desafios de algoritmos do freeCodeCamp", onde eu proponho diversas soluções e explico passo a passo o que acontece por baixo dos panos.</p><p>Alguns outros artigos desta série:</p><p><strong><a href="https://www.freecodecamp.org/news/three-ways-to-repeat-a-string-in-javascript-2a9053b93a2d/">Três maneiras de repetir uma string em JavaScript</a> (ainda não traduzido)</strong></p><p><strong><a href="https://www.freecodecamp.org/news/two-ways-to-confirm-the-ending-of-a-string-in-javascript-62b4677034ac/">Duas maneiras de confirmar o fim de uma string em JavaScript</a> (ainda não traduzido)</strong></p><p><strong><a href="https://www.freecodecamp.org/news/three-ways-to-title-case-a-sentence-in-javascript-676a9175eb27/">Três maneiras de colocar a primeira letra de todas as palavras de uma string em maiúsculas em JavaScript</a> (ainda não traduzido)</strong></p><p><strong><a href="https://www.freecodecamp.org/portuguese/news/tres-maneiras-de-inverter-uma-string-em-javascript/">Três maneiras de inverter uma string em JavaScript</a></strong></p><p><strong><a href="https://www.freecodecamp.org/portuguese/news/tres-maneiras-de-encontrar-o-fatorial-de-um-numero-em-javascript/">Três maneiras de encontrar o fatorial de um número em JavaScript</a></strong></p><p><strong><a href="https://www.freecodecamp.org/portuguese/news/duas-maneiras-de-conferir-palindromos-em-javascript/">Duas maneiras de conferir palíndromos em JavaScript</a></strong></p><p><strong><a href="https://www.freecodecamp.org/portuguese/news/tres-maneiras-de-encontrar-o-maior-numero-em-um-array-em-javascript/">Três maneiras de encontrar o maior número em um array em<strong> JavaScript</strong></a></strong></p><p>Você pode seguir a autora no <strong><strong><a href="https://medium.com/@sonya.moisset" rel="noopener">Medium</a>, </strong></strong>no <a href="https://twitter.com/SonyaMoisset" rel="noopener"><strong><strong>Twitter</strong></strong></a><strong><strong>, </strong></strong>no <a href="https://github.com/SonyaMoisset" rel="noopener"><strong><strong>Github</strong></strong></a> e no <strong><strong><a href="https://www.linkedin.com/in/sonyamoisset" rel="noopener">LinkedIn</a></strong></strong> 😜</p><p>‪#‎StayCurious‬, ‪#‎KeepOnHacking‬ e ‪#‎MakeItHappen‬!</p><h3 id="recursos"><strong>Recursos</strong></h3><ul><li><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/split">split() method — MDN</a></li><li><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/sort">sort() method — MDN</a></li><li><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce">reduce() — MDN</a></li><li><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/length">String.length — MDN</a></li><li><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/for">for — MDN</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Marcadores no Google Maps - como fixar uma localização e remover marcadores ]]>
                </title>
                <description>
                    <![CDATA[ É fácil dizer a um amigo onde encontrá-lo caso você esteja em um local com um endereço de verdade. Porém, se vocês estiverem tentando se encontrar em um parque enorme, ou se você está tentando dar a ele direções para um local supersecreto de um acampamento naquela estrada de terra ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/marcadores-no-google-maps-como-fixar-uma-localizacao-e-remover-marcadores/</link>
                <guid isPermaLink="false">6340892d287f9a05e0d4c7e5</guid>
                
                    <category>
                        <![CDATA[ Google ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Eduardo de Oliveira Machado ]]>
                </dc:creator>
                <pubDate>Thu, 01 Dec 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/5f9c9f96740569d1a4ca4361.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/dropped-pins-in-google-maps-how-to-pin-a-location-and-remove-a-pin/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Dropped Pins in Google Maps - How to Pin a Location and Remove a Pin</a>
      </p><p>É fácil dizer a um amigo onde encontrá-lo caso você esteja em um local com um endereço de verdade. Porém, se vocês estiverem tentando se encontrar em um parque enorme, ou se você está tentando dar a ele direções para um local supersecreto de um acampamento naquela estrada de terra sem nome, como fazer?</p><p>Tem um jeito mais fácil do que dizer "virar à esquerda na vaca, após a árvore grande": usando um marcador (em inglês, <em>pin</em>) no Google Maps.</p><h2 id="o-que-isso-significa">O que isso significa?</h2><p>Quando você deixa um marcador na sua localização exata, você está dando ao GPS as coordenadas exatas daquele lugar.</p><p>Assim, quando você o compartilhar com seu amigo, você estará dizendo a ele exatamente onde você está – e não o logradouro mais próximo (que pode estar a metros de distância).</p><h3 id="como-se-faz-ent-o">Como se faz, então?</h3><p>Vamos seguir o passo a passo para adicionar (e remover) um marcador no Google Maps, tanto no seu PC, quanto no seu telefone.</p><h2 id="como-deixar-um-marcador-no-pc-">Como deixar um marcador no PC:</h2><h3 id="passo-1-abre-seu-navegador-favorito-e-v-para-o-google-maps-">Passo 1: Abre seu navegador favorito e vá para o Google Maps.</h3><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-pin-1.png" class="kg-image" alt="Google-maps-pin-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Google-maps-pin-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/Google-maps-pin-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-pin-1.png 1428w" sizes="(min-width: 1200px) 1200px" width="1428" height="762" loading="lazy"></figure><h3 id="passo-2-v-para-uma-localiza-o-mais-espec-fica-">Passo 2: Vá para uma localização mais específica.</h3><p>No campo "Pesquisar no Google Maps", insira uma localização mais específica para reduzir seu escopo de procura.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-location.png" class="kg-image" alt="Google-maps-location" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Google-maps-location.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/Google-maps-location.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-location.png 1427w" sizes="(min-width: 1200px) 1200px" width="1427" height="647" loading="lazy"><figcaption>Escolha o ponto de partida</figcaption></figure><p>Agora, você está mais perto. Porém, ainda não é perto o suficiente. Barton Creek Greenbelt, em Austin, é um lugar ligeiramente vasto. Então, dê um pouco de zoom.</p><h3 id="passo-3-ponha-seu-marcador">Passo 3: Ponha seu marcador</h3><p>Quando tiver dado zoom o suficiente, selecione a localização que você quer marcar. Clique com o botão direito do mouse e selecione "Direções até aqui" no menu que aparecer:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-directions-to-here.png" class="kg-image" alt="Google-maps-directions-to-here" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Google-maps-directions-to-here.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/Google-maps-directions-to-here.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-directions-to-here.png 1327w" sizes="(min-width: 1200px) 1200px" width="1327" height="623" loading="lazy"><figcaption>Clique com o botão direito para pôr o marcador exatamente onde você está (ou aonde quer ir)</figcaption></figure><p>Será, então, solicitado que você ponha um ponto de partida (de onde seu amigo está vindo?) e serão dadas instruções de direção para aquele local.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-pin-directions.png" class="kg-image" alt="Google-maps-pin-directions" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Google-maps-pin-directions.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/Google-maps-pin-directions.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-pin-directions.png 1326w" sizes="(min-width: 1200px) 1200px" width="1326" height="652" loading="lazy"><figcaption>Obtendo direções</figcaption></figure><h3 id="passo-4-compartilhe-suas-dire-es">Passo 4: Compartilhe suas direções</h3><p>Agora, você só precisa dizer ao seu amigo aonde ir – então, será necessário compartilhar as direções.</p><p>Clique no menu de hambúrguer (aquele com três barras horizontais) no canto superior esquerdo, e selecione "Compartilhar ou incorporar mapas" da lista suspensa que será aberta.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-share-map.png" class="kg-image" alt="Google-maps-share-map" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Google-maps-share-map.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/Google-maps-share-map.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-share-map.png 1130w" width="1130" height="641" loading="lazy"><figcaption>Compartilhe o mapa com um amigo</figcaption></figure><p>Você terá a opção de compartilhar por alguma rede social ou, se preferir mantê-lo privado, de copiar o link e enviá-lo diretamente a seu amigo:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-share-map-link.png" class="kg-image" alt="Google-maps-share-map-link" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Google-maps-share-map-link.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/11/Google-maps-share-map-link.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-share-map-link.png 1209w" sizes="(min-width: 1200px) 1200px" width="1209" height="614" loading="lazy"><figcaption>Se quiser, compartilhe o mapa com todo mundo (só se você quiser que o mundo saiba onde você está)</figcaption></figure><p>Pronto! Seu amigo terá uma chance muito maior de encontrar você agora.</p><h3 id="como-remover-o-marcador">Como remover o marcador</h3><p>Se você quiser remover o marcador do Google Maps, simplesmente clique com o botão direito nele e selecione "Remover este destino." Pronto! Ele se foi.</p><h2 id="como-p-r-um-marcador-com-seu-telefone-">Como pôr um marcador com seu telefone.</h2><p>É muito fácil adicionar um marcador com seu iPhone. Basta abrir a aplicação do Google Maps e navegar até a área geral onde você está/quer estar.</p><h3 id="passo-1-encontre-seu-lugar">Passo 1: Encontre seu lugar</h3><p>Dê um zoom, como fizemos antes, até que você possa ver o lugar que você quer marcar. Depois, basta apertar e segurar até o pequeno marcador vermelho aparecer:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-dropped-pin.png" class="kg-image" alt="Google-maps-dropped-pin" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Google-maps-dropped-pin.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-dropped-pin.png 750w" width="750" height="1334" loading="lazy"><figcaption>Apenas um toque e segurar de leve para o marcador vermelho aparecer.</figcaption></figure><p>Quando tiver posicionado o marcador, você verá algumas opções. Você pode escolher:</p><ul><li>Obter direções de um local específico para aquele lugar</li><li>Nomear o lugar para usar futuramente</li><li>Compartilhar as coordenadas de GPS (por um link) por texto, e-mail etc.</li><li>Baixar o mapa para acessá-lo quando não tiver internet</li></ul><h3 id="passo-2-compartilhe-seu-marcador">Passo 2: Compartilhe seu marcador</h3><p>Você pode compartilhar seu marcador com um amigo do mesmo modo que fizemos acima. Por exemplo, você pode enviar as coordenadas/link via texto:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Dropped-pin-share.png" class="kg-image" alt="Dropped-pin-share" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Dropped-pin-share.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Dropped-pin-share.png 750w" sizes="(min-width: 720px) 720px" width="750" height="1334" loading="lazy"><figcaption>Escolha compartilhar sua localização via Air Drop, mensagem, e-mail e assim por diante.</figcaption></figure><p>Você também pode obter a direção de um local para o marcador. Se você escolher esta opção, basta selecionar a guia "direções" e inserir um ponto de partida.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/directions.png" class="kg-image" alt="directions" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/directions.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/directions.png 750w" sizes="(min-width: 720px) 720px" width="750" height="1334" loading="lazy"><figcaption>Para os que aprendem visualmente...</figcaption></figure><p>Viu? Bem fácil! :)</p><h3 id="como-remover-o-marcador-1">Como remover o marcador</h3><p>Se você quiser remover este marcador, basta clicar no x no campo de pesquisa e ele desaparecerá.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-dropped-pin-1.png" class="kg-image" alt="Google-maps-dropped-pin-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/Google-maps-dropped-pin-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Google-maps-dropped-pin-1.png 750w" sizes="(min-width: 720px) 720px" width="750" height="1334" loading="lazy"><figcaption>Basta limpar o campo de pesquisa e o marcador desaparecerá</figcaption></figure><p>Agora, você pode encontrar seus amigos (ou ser encontrado) a qualquer hora – mesmo se estiver no meio do nada.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
