<?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[ Thiago Costa Barbosa - 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[ Thiago Costa Barbosa - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 17 May 2026 08:32:00 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/thiagocostabarbosa/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ React Context para iniciantes – o guia completo ]]>
                </title>
                <description>
                    <![CDATA[ React Context é uma ferramenta essencial para todo desenvolvedor React conhecer. Ele permite compartilhar facilmente o estado em suas aplicações. Neste guia, abordaremos o que é o React Context, como usá-lo, quando e quando não usar o context, e muito mais. Mesmo que você nunca tenha trabalhado com o React ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/</link>
                <guid isPermaLink="false">646583beae2709063d5d9f3c</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Thu, 08 Jun 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/react-context-for-beginners.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/react-context-for-beginners/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">React Context for Beginners – The Complete Guide (2021)</a>
      </p><p><em>React Context </em>é uma ferramenta essencial para todo desenvolvedor React conhecer. Ele permite compartilhar facilmente o estado em suas aplicações.</p><p>Neste guia, abordaremos o que é o<em> React Context</em>, como usá-lo, quando e quando não usar o <em>context</em>, e muito mais.</p><p>Mesmo que você nunca tenha trabalhado com o <em>React context</em> antes, está no lugar certo. Você aprenderá tudo o que precisa saber com exemplos simples e passo a passo.</p><p>Vamos começar!</p><h2 id="conte-do"><strong>Conteúdo</strong></h2><ul><li><a href="https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/#o-que-o-react-context">O que é o React Context?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/#quando-devo-usar-o-react-context">Quando devo usar o React Context?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/#quais-problemas-o-react-context-resolve">Quais problemas o React Context resolve?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/#como-eu-uso-o-react-context">Como eu uso o React Context?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/#o-que-o-hook-usecontext">O que é o hook useContext?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/#voc-pode-n-o-precisar-do-context">Você pode não precisar do Context</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/#ele-substitui-o-redux">Ele substitui o Redux?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/react-context-para-iniciantes-o-guia-completo/#avisos-sobre-o-react-context">Avisos sobre o React Context</a></li></ul><h2 id="o-que-o-react-context">O que é o React Context<strong>?</strong></h2><p><em>React Context </em>nos permite passar e usar (consumir) dados em qualquer componente que precisamos em nossa aplicação do React sem usar propriedades.</p><p><em>Em outras palavras<em>, </em>o <em>React </em>C<em>ontext </em></em>nos permite compartilhar dados (estados) entre nossos componentes de modo mais fácil<em><em>.</em></em></p><p>Caso você não saiba o que são estados (<em>states</em>), esse é um termo que se refere a um objeto que armazena dados, que podem mudar ao longo do tempo. É uma maneira de gerenciar e atualizar dados em um componente ou aplicação sem afetar outras partes.</p><h2 id="quando-devo-usar-o-react-context">Quando devo usar o React Context<strong>?</strong></h2><p>O <em>React Context</em> é muito bom quando você está transmitindo dados que podem ser usados ​​em qualquer componente da aplicação.</p><p><strong><strong>Esses tipos de dados incluem:</strong></strong></p><ul><li>Dados do tema (como modo claro ou escuro)</li><li>Dados do usuário (a autenticação do usuário)</li><li>Dados específicos do local (como idioma ou o local do usuário)</li></ul><p>Os dados que devem ser colocados no <em>React Context</em> são aqueles que não precisam ser atualizados com frequência.</p><p>Por quê? Porque o <em>Context </em>não foi criado como um sistema completo de gerenciamento de estado. Ele foi feito para facilitar o consumo dos dados.</p><p><em>Você pode pensar no React Context como o equivalente a variáveis ​​globais para nossos componentes do React.</em></p><h2 id="quais-problemas-o-react-context-resolve">Quais problemas o React Context resolve<strong>?</strong></h2><p>O React Context nos ajuda a evitar o problema de propagação de propriedades <em>(props drilling</em>).</p><p>A <strong>propagação de propriedades (<em>props drilling</em>)</strong> é um termo usado para descrever quando você passa propriedades por vários níveis para um componente aninhado, através de componentes que não precisam delas.</p><p>Aqui está um exemplo de propagação de propriedades. Nesta aplicação, temos acesso aos dados do tema que queremos passar como propriedade para todos os componentes.</p><p>Como você pode ver, os filhos diretos de <code>App</code>, como o <code>Header</code>, também precisam passar os dados do tema usando propriedades.</p><pre><code class="language-js">export default function App({ theme }) {
  return (
    &lt;&gt;
      &lt;Header theme={theme} /&gt;
      &lt;Main theme={theme} /&gt;
      &lt;Sidebar theme={theme} /&gt;
      &lt;Footer theme={theme} /&gt;
    &lt;/&gt;
  );
}

function Header({ theme }) {
  return (
    &lt;&gt;
      &lt;User theme={theme} /&gt;
      &lt;Login theme={theme} /&gt;
      &lt;Menu theme={theme} /&gt;
    &lt;/&gt;
  );
}</code></pre><p><em>Qual é o problema com este exemplo?</em></p><p>O problema é que estamos passando o <code>theme</code> através de vários componentes que não precisam dele imediatamente.</p><p>O componente <code>Header</code> não precisa do <code>theme</code> além de repassá-lo para o seu componente filho. Em outras palavras, seria melhor para <code>User</code>, <code>Login</code> e <code>Menu</code> consumirem os dados de <code>theme</code> diretamente.</p><p>Essa é a vantagem do <em>React Context</em> – podemos evitar totalmente o uso de props e, assim, evitar o problema de "<em>props drilling</em>".</p><h2 id="como-eu-uso-o-react-context">Como eu uso o React Context?</h2><p>O <em>Context </em>é uma API integrada ao React, a partir da sua versão 16.</p><p>Isso significa que podemos criar um <em>Context</em> e usá-lo diretamente importando o React em qualquer projeto.</p><p><strong><strong>Existem quatro etapas para usar o <em>React </em></strong><em>C</em><strong><em>ontext</em>:</strong></strong></p><ol><li>Crie o <em>context </em>usando o método <code>createContext</code></li><li>Pegue o <em>context </em>criado e envolva a árvore de componentes com o provedor (<em>provider</em>) do <em>context</em>.</li><li>Coloque qualquer valor que desejar no provedor do<em> React Context</em> usando a propriedade <code>value</code>.</li><li>Leia esse valor em qualquer componente usando o consumidor do <em>Context</em>.</li></ol><p><em>Tudo isso parece meio confuso?</em> É mais simples do que você pensa.</p><p>Vamos dar uma olhada em um exemplo muito básico. No nosso <code>App</code>, vamos passar o nosso próprio nome usando o <em>Context </em>e lê-lo em um componente aninhado: <code>User</code>.</p><pre><code class="language-js">import React from 'react';

export const UserContext = React.createContext();

export default function App() {
  return (
    &lt;UserContext.Provider value="Reed"&gt;
      &lt;User /&gt;
    &lt;/UserContext.Provider&gt;
  )
}

function User() {
  return (
    &lt;UserContext.Consumer&gt;
      {value =&gt; &lt;h1&gt;{value}&lt;/h1&gt;} 
      {/* prints: Reed */}
    &lt;/UserContext.Consumer&gt;
  )
}</code></pre><p>Vamos explicar o passo a passo do que estamos fazendo:</p><ol><li>Acima do nosso componente <code>App</code>, estamos criando um <em>context </em>com <code>React.createContext()</code> e colocando o resultado em uma variável, <code>UserContext</code>. Geralmente, você vai querer exportá-lo, como estamos fazendo aqui, porque seu componente estará em outro arquivo. Note que podemos passar um valor inicial para a propriedade <code>value</code> quando chamamos <code>React.createContext()</code>.</li><li>No nosso componente <code>App</code>, estamos usando <code>UserContext</code> – especificamente, <code>UserContext.Provider</code>. Ele é um objeto com duas propriedades: <code>Provider</code> e <code>Consumer</code> – ambas são componentes. Para passar nosso valor para todos os componentes em nosso <em>App</em>, colocamos nosso componente <em>Provider </em>ao redor deles (neste caso, <code>User</code>).</li><li>No <code>UserContext.Provider</code>, colocamos o valor que queremos passar para toda a árvore de componentes. Igualamos à propriedade <code>value</code> para fazer isso. Neste caso, é o nosso nome.</li><li>No componente <code>User</code>, ou onde queremos consumir (ou usar) o que foi fornecido em nosso contexto, usamos o componente do consumidor: <code>UserContext.Consumer</code>. Para usar nosso valor passado, usamos o que é chamado de<strong> padrão de renderização</strong> dessas <em>props</em>. É apenas uma função que o componente do consumidor nos dá como sendo uma propriedade. No retorno dessa função, podemos retornar e usar o <code>value</code>.</li></ol><h2 id="o-que-o-hook-usecontext">O que é o <em>hook</em> <em>useContext</em><strong>?</strong></h2><p>Olhando o exemplo acima, o padrão de renderização de props para usar <em>Context </em>pode parecer um pouco estranho para você.</p><p>Outro modo de usá-lo foi disponibilizado no React 16.8 com a chegada dos hooks do React. Agora, podemos usar o <em>Context </em>com o <strong><em>hook</em> <em>useContext</em></strong>.</p><p>Em vez de usar as renderizações de propriedades, podemos passar todo o objeto de <em>Context </em>para <code>React.useContext()</code> consumir o contexto na parte superior do nosso componente.</p><p>Aqui está o exemplo usando o <em>hook</em> <em>useContext</em>:</p><pre><code class="language-js">import React from 'react';

export const UserContext = React.createContext();

export default function App() {
  return (
    &lt;UserContext.Provider value="Reed"&gt;
      &lt;User /&gt;
    &lt;/UserContext.Provider&gt;
  )
}

function User() {
  const value = React.useContext(UserContext);  
    
  return &lt;h1&gt;{value}&lt;/h1&gt;;
}</code></pre><p>O benefício do <em>hook useContext </em>é que ele torna nossos componentes mais concisos, permitindo criar nossos próprios <em>hooks</em> personalizados<em><em>.</em></em></p><p>Você pode usar tanto o componente consumidor diretamente quanto o <em>hook</em> <em>useContext</em>, dependendo apenas do padrão de sua preferência.</p><h2 id="voc-pode-n-o-precisar-do-context">Você pode não precisar do<strong> Context</strong></h2><p>O erro que muitos desenvolvedores cometem é o de utilizar <em>context </em>quando eles precisam passar propriedades entre vários níveis de componente.</p><p>Aqui está uma aplicação com um componente <code>Avatar</code> que requer duas propriedades, <code>username</code> e <code>avatarSrc</code>, do componente <code>App</code>.</p><pre><code class="language-js">export default function App({ user }) {
  const { username, avatarSrc } = user;

  return (
    &lt;main&gt;
      &lt;Navbar username={username} avatarSrc={avatarSrc} /&gt;
    &lt;/main&gt;
  );
}

function Navbar({ username, avatarSrc }) {
  return (
    &lt;nav&gt;
      &lt;Avatar username={username} avatarSrc={avatarSrc} /&gt;
    &lt;/nav&gt;
  );
}

function Avatar({ username, avatarSrc }) {
  return &lt;img src={avatarSrc} alt={username} /&gt;;
}
</code></pre><p>Se for possível, queremos evitar passar várias propriedades pelos componentes que não precisam delas.</p><p>O que podemos fazer?</p><p>Em vez de recorrer imediatamente ao <em>React Context</em>, por estarmos passando muitas propriedades, devemos compor melhor nossos componentes.</p><p>Como apenas o componente mais alto, <code>App</code>, precisa saber sobre o componente <code>Avatar</code>, podemos criá-lo diretamente dentro de <code>App</code>.</p><p>Isso nos permite passar apenas uma propriedade, <code>avatar</code>, ao invés de duas.</p><pre><code class="language-js">export default function App({ user }) {
  const { username, avatarSrc } = user;

  const avatar = &lt;img src={avatarSrc} alt={username} /&gt;;

  return (
    &lt;main&gt;
      &lt;Navbar avatar={avatar} /&gt;
    &lt;/main&gt;
  );
}

function Navbar({ avatar }) {
  return &lt;nav&gt;{avatar}&lt;/nav&gt;;
}</code></pre><p><em>Resumindo: não utilize imediatamente o Context. Veja se é possível organizar melhor seus componentes para evitar a propagação excessiva de propriedades.</em></p><h2 id="ele-substitui-o-redux">Ele substitui o Redux<strong>?</strong></h2><p>Sim e não.</p><p>Para muitos iniciantes em React, o Redux é um modo mais fácil de passar dados entre componentes. Isso ocorre porque o Redux já vem com o <em>React Context</em>.</p><p>Contudo, se você não está atualizando o estado, mas apenas passando-o pela árvore de componentes, você não precisa de uma biblioteca global de gerenciamento de estado como o Redux.</p><h2 id="avisos-sobre-o-react-context">Avisos sobre o React Context</h2><p><em>Por que não é possível atualizar o valor que o React Context repassa?</em></p><p>Mesmo sendo possível combinar <em>React Context </em>com <em>hooks</em>, como <em>useReducer, </em>e criar uma biblioteca improvisada de gerenciamento de estado sem utilizar nenhuma biblioteca de terceiros, geralmente não é recomendado por motivos de desempenho.</p><p>O problema com isso está no modo como o <em>React Context </em>desencadeia uma nova renderização.</p><p>Se você estiver repassando um objeto no provedor do <em>React Context </em>e qualquer propriedade desse objeto for atualizada, o que acontece? Qualquer componente que o use será renderizado novamente.</p><p>Isso pode não gerar um problema de desempenho em aplicações menores com poucos valores de estado que não são atualizados com muita frequência (como dados de tema). Porém, é um problema se você estiver realizando muitas atualizações de estado em uma aplicação com muitos componentes em sua árvore de componentes.</p><h2 id="considera-o-final"><strong>Consideração final</strong></h2><p>Espero que este guia tenha proporcionado a você uma melhor compreensão de como usar o <em>React Context </em>do início ao fim.</p><p>Se você deseja entender melhor como usar o <em>React context</em> para construir projetos incríveis com o React, confira o <a href="https://reactbootcamp.com/">The React Bootcamp</a> (curso criado pelo autor, em inglês).</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O guia definitivo para Web Scraping com Node.js ]]>
                </title>
                <description>
                    <![CDATA[ Afinal, o que é web scraping? Embora a tradução livre seja algo como "raspagem da rede", ele é bem mais conhecido como sendo a extração de dados da web. É a automatização da tarefa de coletar informações a partir de sites que, se for feita manualmente, é algo bem cansativo. ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-guia-definitivo-para-web-scraping-com-node-js/</link>
                <guid isPermaLink="false">62e32b03fea2f10707d6809b</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Tue, 13 Sep 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_KkVKtysvgh2hIVRI1Irk-Q-1-.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-ultimate-guide-to-web-scraping-with-node-js-daa2027dcd3/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Ultimate Guide to Web Scraping with Node.js</a>
      </p><p>Afinal, o que é <em>web scraping</em>? Embora a tradução livre seja algo como "raspagem da rede", ele é bem mais conhecido como sendo a extração de dados da web. É a automatização da tarefa de coletar informações a partir de sites que, se for feita manualmente, é algo bem cansativo.</p><p>Podemos utilizar o <em>web scraping </em>de muitas formas: você pode querer pegar os preços de vários sites de compras e fazer um site de comparação de preços. Ou talvez precise dos horários de voos e uma lista de hotéis/AirBNB para colocar num site de viagens. Talvez você queira extrair e-mails de vários diretórios para vendê-los como leads ou usar os dados da internet para treinar modelos de IA/aprendizado de máquina. Você pode até querer construir seu próprio mecanismo de busca, como o Google!</p><p>Começar na área de <em>web scraping</em> é fácil e esse processo pode ser dividido em duas partes principais, que são:</p><ul><li>adquirir os dados usando uma biblioteca de requisição de HTML ou um navegador sem a interface gráfica e</li><li>analisar os dados para obter as informações exatas que você deseja.</li></ul><p>Este guia conduzirá você nesse processo com as bibliotecas mais populares do Node.js, <a href="https://github.com/request/request-promise" rel="noopener">Request-promise,</a> <a href="https://github.com/cheeriojs/cheerio" rel="noopener">CheerioJS</a> e <a href="https://github.com/GoogleChrome/puppeteer" rel="noopener">Puppeteer</a>. Trabalhando com os exemplos deste guia, você aprenderá todas as dicas e truques necessários para se tornar profissional na extração de dados com o Node.js!</p><p><em><strong>Nota do tradutor: </strong>a biblioteca <a href="https://github.com/request/request-promise" rel="noopener">Request-promise</a> encontra-se depreciada (não recebeu melhorias/correção de bugs desde 2020) e pode apresentar problemas. Ela, porém, continua no artigo para aprendermos a lógica de como fazermos o web scraping. A segunda parte do artigo, que utiliza apenas as bibliotecas <a href="https://github.com/cheeriojs/cheerio" rel="noopener">CheerioJS</a> e <a href="https://github.com/GoogleChrome/puppeteer" rel="noopener">Puppeteer</a>, funciona normalmente, sendo o método mais recomendado.</em></p><p>Faremos uma lista de todos os nomes dos presidentes dos EUA, seus respectivos aniversários a partir da Wikipédia e todos os títulos das postagens na primeira página do Reddit.</p><p>Para isso, vamos primeiro instalar as bibliotecas que usaremos neste guia (o Puppeteer leva um tempo maior para instalar, pois precisa baixar também o Chromium com ele).</p><h3 id="fazendo-sua-primeira-requisi-o"><strong>Fazendo sua primeira requisição</strong></h3><pre><code>npm install --save request request-promise cheerio puppeteer</code></pre><p>Em seguida, vamos criar um arquivo com o nome de <em>potusScraper.js</em>, e escrever uma função rápida para obter o HTML da página da "Lista dos presidentes dos EUA", diretamente da Wikipédia em inglês.</p><pre><code class="language-js">const rp = require('request-promise');
const url = 'https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States';

rp(url)
  .then(function(html){
    //success!
    console.log(html);
  })
  .catch(function(err){
    //handle error
  });</code></pre><p>Resultado:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html class="client-nojs" lang="en" dir="ltr"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"/&gt;
&lt;title&gt;List of Presidents of the United States - Wikipedia&lt;/title&gt;
...</code></pre><p><em><strong>Nota do tradutor</strong>: o nome do arquivo, potusScraper.js, tem a ver com o fato de que PotUS, em inglês, é a abreviação para "Presidents of the United States". A segunda parte, "scraper", tem a ver com o mecanismo que realiza o "scraping".</em></p><h3 id="usando-o-chrome-devtools"><strong>Usando o Chrome DevTools</strong></h3><p>Certo, temos o HTML bruto da página! Agora, precisamos entender esse bloco gigante de texto. Para fazer isso, precisaremos usar o Chrome DevTools, que nos permite pesquisar facilmente dentro do HTML da página.</p><p>Usar o Chrome DevTools é bem fácil: é só abrir o Google Chrome e clicar com o botão direito do mouse no elemento que você deseja extrair (neste caso, estou clicando com o botão direito do mouse em George Washington, pois queremos obter os links das páginas da Wikipédia de cada presidente):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_gLKhu_EO-cDqYna1P9WL_w.png" class="kg-image" alt="1_gLKhu_EO-cDqYna1P9WL_w" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_gLKhu_EO-cDqYna1P9WL_w.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_gLKhu_EO-cDqYna1P9WL_w.png 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><p>Agora, clicamos em <em>Inspect</em>, ou Inspecionar, e o Chrome exibirá o painel DevTools, permitindo que você inspecione facilmente a estrutura do HTML da página.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_HSUjFgji22vjwvGi2uZe1A.png" class="kg-image" alt="1_HSUjFgji22vjwvGi2uZe1A" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_HSUjFgji22vjwvGi2uZe1A.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_HSUjFgji22vjwvGi2uZe1A.png 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><h3 id="analisando-o-html-com-cheerio-js"><strong>Analisando o HTML com Cheerio.js</strong></h3><p>Agora, o Chrome DevTools nos mostra o padrão exato que devemos procurar no código (uma tag "big" com um hiperlink dentro dela). Vamos usar o Cheerio.js para analisar o HTML que recebemos anteriormente para retornar uma lista com os links de cada página dos presidentes americanos.</p><pre><code class="language-js">const rp = require('request-promise');
const $ = require('cheerio');
const url = 'https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States';

rp(url)
  .then(function(html){
    //success!
    console.log($('big &gt; a', html).length);
    console.log($('big &gt; a', html));
  })
  .catch(function(err){
    //handle error
  });</code></pre><p>Resultado:</p><pre><code class="language-js">45
{ '0':
  { type: 'tag',
    name: 'a',
    attribs: { href: '/wiki/George_Washington', title: 'George Washington' },
    children: [ [Object] ],
    next: null,
    prev: null,
    parent:
      { type: 'tag',
        name: 'big',
        attribs: {},
        children: [Array],
        next: null,
        prev: null,
        parent: [Object] } },
  '1':
    { type: 'tag'
  ...</code></pre><p>Verificamos se há exatamente 45 elementos retornados (o número de presidentes americanos), o que significa que não há tags "big" extras ocultas em outros lugares da página. Agora, podemos acessar e obter a lista de links para todas as 45 páginas presidenciais da Wikipédia, a partir da propriedade "attribs" de cada elemento, desta forma:</p><pre><code class="language-js">const rp = require('request-promise');
const $ = require('cheerio');
const url = 'https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States';

rp(url)
  .then(function(html){
    //success!
    const wikiUrls = [];
    for (let i = 0; i &lt; 45; i++) {
      wikiUrls.push($('big &gt; a', html)[i].attribs.href);
    }
    console.log(wikiUrls);
  })
  .catch(function(err){
    //handle error
  });</code></pre><p>Resultado:</p><pre><code class="language-js">[
  '/wiki/George_Washington',
  '/wiki/John_Adams',
  '/wiki/Thomas_Jefferson',
  '/wiki/James_Madison',
  '/wiki/James_Monroe',
  '/wiki/John_Quincy_Adams',
  '/wiki/Andrew_Jackson',
  ...
]</code></pre><p>Agora que temos a lista de todas as 45 páginas presidenciais da Wikipédia, vamos criar um outro arquivo (chamado <em>potusParse.js</em>), que vai ter a função de pegar uma página presidencial da Wikipédia e retornar o nome e o aniversário do presidente. Como exemplo, vamos pegar o HTML bruto da página da Wikipédia de George Washington.</p><pre><code class="language-js">const rp = require('request-promise');
const url = 'https://en.wikipedia.org/wiki/George_Washington';

rp(url)
  .then(function(html) {
    console.log(html);
  })
  .catch(function(err) {
    //handle error
  });</code></pre><p>Resultado:</p><pre><code class="language-html">&lt;html class="client-nojs" lang="en" dir="ltr"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"/&gt;
&lt;title&gt;George Washington - Wikipedia&lt;/title&gt;
...</code></pre><p>Usaremos, mais uma vez, o Chrome DevTools para encontrar a sintaxe do código que queremos analisar, para que possamos extrair o nome e o aniversário com o Cheerio.js.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_exzZbuIwfrCcbTM2rr9_bw.png" class="kg-image" alt="1_exzZbuIwfrCcbTM2rr9_bw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_exzZbuIwfrCcbTM2rr9_bw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_exzZbuIwfrCcbTM2rr9_bw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_yth6AmHpywM77n0wEprpiA.png" class="kg-image" alt="1_yth6AmHpywM77n0wEprpiA" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_yth6AmHpywM77n0wEprpiA.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_yth6AmHpywM77n0wEprpiA.png 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><p>Então, vemos que o nome está em uma classe chamada "firstHeading" e o aniversário está em uma classe chamada "bday". Vamos modificar nosso código para usar o Cheerio.js para extrair essas duas classes.</p><pre><code class="language-js">const rp = require('request-promise');
const $ = require('cheerio');
const url = 'https://en.wikipedia.org/wiki/George_Washington';

rp(url)
  .then(function(html) {
    console.log($('.firstHeading', html).text());
    console.log($('.bday', html).text());
  })
  .catch(function(err) {
    //handle error
  });</code></pre><p>Resultado:</p><pre><code class="language-js">George Washington
1732-02-22</code></pre><h3 id="juntando-tudo"><strong>Juntando tudo</strong></h3><p>Perfeito! Agora, vamos transformar esse código em uma função e exportá-la do módulo, assim:</p><pre><code class="language-js">const rp = require('request-promise');
const $ = require('cheerio');

const potusParse = function(url) {
  return rp(url)
    .then(function(html) {
      return {
        name: $('.firstHeading', html).text(),
        birthday: $('.bday', html).text(),
      };
    })
    .catch(function(err) {
      //handle error
    });
};

module.exports = potusParse;</code></pre><p>No nosso arquivo original, <em>potusScraper.js</em>, vamos importar o módulo <em>potusParse.js</em> e aplicá-lo à lista de wikiUrls que reunimos anteriormente.</p><pre><code class="language-js">const rp = require('request-promise');
const $ = require('cheerio');
const potusParse = require('./potusParse');
const url = 'https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States';

rp(url)
  .then(function(html) {
    //success!
    const wikiUrls = [];
    for (let i = 0; i &lt; 45; i++) {
      wikiUrls.push($('big &gt; a', html)[i].attribs.href);
    }
    return Promise.all(
      wikiUrls.map(function(url) {
        return potusParse('https://en.wikipedia.org' + url);
      })
    );
  })
  .then(function(presidents) {
    console.log(presidents);
  })
  .catch(function(err) {
    //handle error
    console.log(err);
  });</code></pre><p>Resultado:</p><pre><code class="language-js">[
  { name: 'George Washington', birthday: '1732-02-22' },
  { name: 'John Adams', birthday: '1735-10-30' },
  { name: 'Thomas Jefferson', birthday: '1743-04-13' },
  { name: 'James Madison', birthday: '1751-03-16' },
  { name: 'James Monroe', birthday: '1758-04-28' },
  { name: 'John Quincy Adams', birthday: '1767-07-11' },
  { name: 'Andrew Jackson', birthday: '1767-03-15' },
  { name: 'Martin Van Buren', birthday: '1782-12-05' },
  { name: 'William Henry Harrison', birthday: '1773-02-09' },
  { name: 'John Tyler', birthday: '1790-03-29' },
  { name: 'James K. Polk', birthday: '1795-11-02' },
  { name: 'Zachary Taylor', birthday: '1784-11-24' },
  { name: 'Millard Fillmore', birthday: '1800-01-07' },
  { name: 'Franklin Pierce', birthday: '1804-11-23' },
  { name: 'James Buchanan', birthday: '1791-04-23' },
  { name: 'Abraham Lincoln', birthday: '1809-02-12' },
  { name: 'Andrew Johnson', birthday: '1808-12-29' },
  { name: 'Ulysses S. Grant', birthday: '1822-04-27' },
  { name: 'Rutherford B. Hayes', birthday: '1822-10-04' },
  { name: 'James A. Garfield', birthday: '1831-11-19' },
  { name: 'Chester A. Arthur', birthday: '1829-10-05' },
  { name: 'Grover Cleveland', birthday: '1837-03-18' },
  { name: 'Benjamin Harrison', birthday: '1833-08-20' },
  { name: 'Grover Cleveland', birthday: '1837-03-18' },
  { name: 'William McKinley', birthday: '1843-01-29' },
  { name: 'Theodore Roosevelt', birthday: '1858-10-27' },
  { name: 'William Howard Taft', birthday: '1857-09-15' },
  { name: 'Woodrow Wilson', birthday: '1856-12-28' },
  { name: 'Warren G. Harding', birthday: '1865-11-02' },
  { name: 'Calvin Coolidge', birthday: '1872-07-04' },
  { name: 'Herbert Hoover', birthday: '1874-08-10' },
  { name: 'Franklin D. Roosevelt', birthday: '1882-01-30' },
  { name: 'Harry S. Truman', birthday: '1884-05-08' },
  { name: 'Dwight D. Eisenhower', birthday: '1890-10-14' },
  { name: 'John F. Kennedy', birthday: '1917-05-29' },
  { name: 'Lyndon B. Johnson', birthday: '1908-08-27' },
  { name: 'Richard Nixon', birthday: '1913-01-09' },
  { name: 'Gerald Ford', birthday: '1913-07-14' },
  { name: 'Jimmy Carter', birthday: '1924-10-01' },
  { name: 'Ronald Reagan', birthday: '1911-02-06' },
  { name: 'George H. W. Bush', birthday: '1924-06-12' },
  { name: 'Bill Clinton', birthday: '1946-08-19' },
  { name: 'George W. Bush', birthday: '1946-07-06' },
  { name: 'Barack Obama', birthday: '1961-08-04' },
  { name: 'Donald Trump', birthday: '1946-06-14' }
]</code></pre><h3 id="renderizando-p-ginas-em-javascript"><strong>Renderizando páginas em JavaScript</strong></h3><p>Aí está! Uma lista dos nomes e aniversários de todos os 45 presidentes americanos. Usar apenas o módulo request-promise e o Cheerio.js já permitirá a você extrair informações da grande maioria dos sites na internet.</p><p>Recentemente, no entanto, muitos sites começaram a usar o JavaScript para gerar conteúdo dinâmico em seus sites. Isso causa um problema para o <em>request-promise </em>e outras bibliotecas de requisição de HTTP semelhantes (como o axios e o fetch), pois elas só obtêm a resposta da requisição inicial, não podendo executar o JavaScript da mesma forma que um navegador da web.</p><p>Assim, para extrair dados de sites que exigem a execução do JavaScript, precisamos de outra solução. Em nosso próximo exemplo, obteremos os títulos de todas as postagens na primeira página do Reddit. Vamos ver o que acontece quando tentamos usar <em>request-promise</em> como fizemos no exemplo anterior.</p><p>Resultado:</p><pre><code class="language-js">const rp = require('request-promise');
const url = 'https://www.reddit.com';

rp(url)
  .then(function(html){
    //success!
    console.log(html);
  })
  .catch(function(err){
    //handle error
  });
}</code></pre><p>Este é o resultado:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;&lt;html
lang="en"&gt;&lt;head&gt;&lt;title&gt;reddit: the front page of the
internet&lt;/title&gt;
...</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_mKzPVGRR4CFKMwQw5y_YnQ.png" class="kg-image" alt="1_mKzPVGRR4CFKMwQw5y_YnQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_mKzPVGRR4CFKMwQw5y_YnQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_mKzPVGRR4CFKMwQw5y_YnQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><p>Hmmm... não é bem o que queremos. Isso porque, para pegar o conteúdo real, é preciso que você execute o JavaScript na página! Com o Puppeteer, isso não é problema.</p><p>O Puppeteer é um novo módulo extremamente popular feito pela equipe do Google Chrome que permite controlar um navegador sem a parte gráfica (geralmente é chamado de navegador sem cabeça). Ele é perfeito para extrair os dados de modo programático de páginas que precisam executar o JavaScript. Então, vamos pegar o HTML da primeira página do Reddit usando o Puppeteer em vez do request-promise.</p><pre><code class="language-js">const puppeteer = require('puppeteer');
const url = 'https://www.reddit.com';

puppeteer
  .launch()
  .then(function(browser) {
    return browser.newPage();
  })
  .then(function(page) {
    return page.goto(url).then(function() {
      return page.content();
    });
  })
  .then(function(html) {
    console.log(html);
  })
  .catch(function(err) {
    //handle error
  });</code></pre><p>Resultado:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt;&lt;link
  href="//c.amazon-adsystem.com/aax2/apstag.js" rel="preload"
  as="script"&gt;
...</code></pre><p>Agora, sim, a página está com o conteúdo correto!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_N5HtAiijcMEB_fBQvPd7Ow.png" class="kg-image" alt="1_N5HtAiijcMEB_fBQvPd7Ow" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_N5HtAiijcMEB_fBQvPd7Ow.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_N5HtAiijcMEB_fBQvPd7Ow.png 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><p>Usaremos o Chrome DevTools como fizemos no exemplo anterior.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_tHSgjPMvn3M26N2f7Q2B1Q.png" class="kg-image" alt="1_tHSgjPMvn3M26N2f7Q2B1Q" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_tHSgjPMvn3M26N2f7Q2B1Q.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_tHSgjPMvn3M26N2f7Q2B1Q.png 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><p>Parece que o Reddit está colocando os títulos dentro das tags "h2". Usaremos o Cheerio.js para extrair as tags h2 da página.</p><pre><code class="language-js">const puppeteer = require('puppeteer');
const $ = require('cheerio');
const url = 'https://www.reddit.com';

puppeteer
  .launch()
  .then(function(browser) {
    return browser.newPage();
  })
  .then(function(page) {
    return page.goto(url).then(function() {
      return page.content();
    });
  })
  .then(function(html) {
    $('h2', html).each(function() {
      console.log($(this).text());
    });
  })
  .catch(function(err) {
    //handle error
  });</code></pre><p>E esse é o resultado final:</p><pre><code class="language-js">Russian Pipeline. Upvote so that this is the first image people see when they Google “Russian Pipeline”
John F. Kennedy Jr. Sitting in the pilot seat of the Marine One circa 1963
I didn't take it as a compliment.
How beautiful is this
Hustle like Faye
The power of a salt water crocodile's tail.
I'm 36, and will be dead inside of a year.
F***ing genius.
TIL Anthony Daniels, who endured years of discomfort in the C-3PO costume, was so annoyed by Alan Tudyk (Rogue One) playing K-2SO in the comfort of a motion-capture suit that he cursed at Tudyk. Tudyk later joked that a "fuck you" from Daniels was among the highest compliments he had ever received.
Reminder about the fact UC Davis paid over $100k to remove this photo from the internet.
King of the Hill reruns will start airing on Comedy Central July 24th
[Image] Slow and steady
White House: Trump open to Russia questioning US citizens
Godzilla: King of the Monsters Teaser Banner
He tried
Soldier reunited with his dog after being away.
Hiring a hitman on yourself and preparing for battle is the ultimate extreme sport.
Two paintballs colliding midair
My thoughts &amp; prayers are with those ears
When even your fantasy starts dropping hints
Elon Musk's apology is out
"When you're going private so you plant trees to throw some last shade at TDNW before you vanish." Thanos' farm advances. The soul children will have full bellies. 1024 points will give him the resources to double, and irrigate, his farm. (See comment)
Some leaders prefer chess, others prefer hungry hippos. Travis Chapman, oil, 2018
The S.S. Ste. Claire, retired from ferrying amusement park goers, now ferries The Damned across the river Styx.
A soldier is reunited with his dog
*hits blunt*
Today I Learned
Black Panther Scene Representing the Pan-African Flag
The precision of this hydraulic press.
Let bring the game to another level
When you're fighting a Dark Souls boss and you gamble to get 'just one extra hit' in instead of rolling out of range.
"I check for traps"
Anon finds his home at last
He’s hungry
Being a single mother is a thankless job.
TIL That when you're pulling out Minigun, you're actually pulling out suitcase that then transforms into Minigun.
OMG guys don’t look!!! 🙈🙈🙈
hyubsama's emote of his own face denied for political reasons because twitch thinks its a picture of Kim Jong Un</code></pre><h3 id="recursos-adicionais"><strong>Recursos adicionais</strong></h3><p>Abaixo deixei uma lista com recursos adicionais! A partir desse ponto, você deve estar confortável o bastante para escrever seu primeiro <em>web scraper</em> e conseguir extrair os dados de qualquer site. Esses são alguns recursos adicionais (em inglês) que você pode achar úteis durante a sua jornada de extração de dados na web:</p><ul><li><a href="https://www.scraperapi.com/blog/the-10-best-rotating-proxy-services-for-web-scraping" rel="noopener">Lista de serviços de proxy de web scraping</a></li><li><a href="https://www.scraperapi.com/blog/the-10-best-web-scraping-tools" rel="noopener">Lista de ferramentas úteis de web scraping</a></li><li><a href="https://www.scraperapi.com/blog/5-tips-for-web-scraping">Lista de dicas de web scraping</a></li><li><a href="https://www.scraperapi.com/blog/free-shared-dedicated-datacenter-residential-rotating-proxies-for-web-scraping">Comparação de proxies de web scraping</a></li><li><a href="https://github.com/cheeriojs/cheerio" rel="noopener">Documentação do Cheerio</a></li><li><a href="https://github.com/GoogleChrome/puppeteer" rel="noopener">Documentação do Puppeteer</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Todos os emojis – lista de emojis para copiar e colar ]]>
                </title>
                <description>
                    <![CDATA[ Os emojis ajudam você a expressar sentimentos e emoções para além dos textos. Eles também trazem vivacidade às conversas de um modo divertido e conciso. Às vezes, no entanto, é difícil encontrar o emoji certo para usar.😒‍ Por isso, resolvi preparar uma tabela gigante deles, que você poderá simplesmente copiar ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/todos-os-emojis-lista-de-emojis-para-copiar-e-colar/</link>
                <guid isPermaLink="false">62d43ed0fea2f10707d6604b</guid>
                
                    <category>
                        <![CDATA[ Emoji ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Tue, 30 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/avatar-4623511_1280-1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/all-emojis-emoji-list-for-copy-and-paste/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">All Emojis – Emoji List for Copy and Paste</a>
      </p><p>Os emojis ajudam você a expressar sentimentos e emoções para além dos textos. Eles também trazem vivacidade às conversas de um modo divertido e conciso.</p><p>Às vezes, no entanto, é difícil encontrar o emoji certo para usar.😒‍</p><p>Por isso, resolvi preparar uma tabela gigante deles, que você poderá simplesmente copiar e colar em qualquer editor. 😁</p><h2 id="como-usar-emojis"><strong>Como usar emojis</strong></h2><p>Para usar esses emojis, você pode copiá-los e colá-los diretamente no editor de qualquer plataforma de rede social ou onde quiser usar o emoji.</p><p>Diferentes plataformas e dispositivos exibem emojis de maneiras diferentes. Por exemplo, os dispositivos da Apple e o Facebook podem torná-los ondulados e podem ser ligeiramente arredondados no Twitter. No geral, os emojis listados neste artigo ainda funcionam em várias plataformas.</p><h3 id="o-que-s-o-e-como-usar-os-caracteres-unicode"><strong>O que são e como usar os caracteres Unicode</strong></h3><p>Para utilizar os emojis, utilizamos os caracteres Unicode. Eles são padrões de codificação universais que atribuem um código a cada caractere, emoji ou símbolo.</p><p>Para inserir qualquer um dos emojis no HTML, por exemplo, troque os caracteres <code>U+</code> do início de todos os caracteres, por um "e" comercial ( <code>&amp;</code>), um jogo da velha ou <em>hashtag</em> ( <code>#</code>) e um <code>x</code> na frente, e coloque um ponto e vírgula no final.</p><p>Por exemplo, <code>&amp;#x1F923;</code> inseriria o emoji de alguém rolando no chão de tanto rir no HTML. Consegui impedir o caractere de ser exibido diretamente colocando acentos graves na frente e atrás dele. Sem eles envolvendo o código do emoji, aparece isso: 🤣.</p><p>Para caracteres Unicode que possuem números especificados para sua execução, especialmente símbolos, você pode inseri-los no HTML sem adicionar o <code>x</code>. Por exemplo, <code>&amp;#8212;</code> gera um travessão (—).</p><p><em><strong>Observação:</strong> dependendo do navegador ou do sistema, alguns emojis podem não ser exibidos corretamente. Um exemplo disso são as bandeiras que, ao invés de mostrá-las, podem exibir somente a sigla delas. Tudo depende do suporte que cada sistema dá aos pacotes de emoji.</em></p><h2 id="lista-de-todos-os-emojis"><strong>Lista de todos os emojis</strong></h2><!--kg-card-begin: html--><style>
  @font-face {
    font-family: NotoColorEmojiLimited;
    unicode-range: U+1F1E6-1F1FF;
    src: url(https://raw.githack.com/googlefonts/noto-emoji/main/fonts/NotoColorEmoji.ttf);
  }
</style>

<table style="display: table; margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; font-family: 'NotoColorEmojiLimited', -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji','Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><thead style="margin: 0px; padding: 0px; border: 0px;background-color: #dfdfe2;"><tr><th><strong>Emoji</strong></th><th><strong>Significado</strong></th><th><strong>Unicode</strong></th></tr></thead><tbody style="margin: 0px; padding: 0px; border: 0px;"><tr><td colspan="3"><strong>Emojis de rostos sorridentes</strong></td></tr><tr><td>🙂</td><td>Rosto sorrindo levemente</td><td>U+1F642</td></tr><tr><td>😀</td><td>Rosto sorrindo</td><td>U+1F600</td></tr><tr><td>😃</td><td>Rosto sorrindo com olhos grandes</td><td>U+1F603</td></tr><tr><td>😄</td><td>Rosto sorrindo com olhos sorridentes</td><td>U+1F604</td></tr><tr><td>😁</td><td>Rosto radiante com olhos sorridentes</td><td>U+1F601</td></tr><tr><td>😅</td><td>Rosto sorrindo com suor</td><td>U+1F605</td></tr><tr><td>😆</td><td>Rosto sorridente com olhos semicerrados</td><td>U+1F606</td></tr><tr><td>🤣</td><td>Rolando de rir no chão</td><td>U+1F923</td></tr><tr><td>😂</td><td>Rosto com lágrimas de alegria</td><td>U+1F602</td></tr><tr><td>🙃</td><td>Rosto de cabeça para baixo</td><td>U+1F643</td></tr><tr><td>😉</td><td>Cara piscando</td><td>U+1F609</td></tr><tr><td>😊</td><td>Rosto sorridente e corado</td><td>U+1F60A</td></tr><tr><td>😇</td><td>Rosto sorridente com auréola</td><td>U+1F607</td></tr><tr><td>😎</td><td>Rosto sorridente com óculos de sol</td><td>U+1F60E</td></tr><tr><td>🤓</td><td>Cara de nerd</td><td>U+1F913</td></tr><tr><td>🧐</td><td>Rosto com monóculo</td><td>U+1F9D0</td></tr><tr><td>🥳</td><td>Cara de festa</td><td>U+1F973</td></tr><tr><td colspan="3"><strong>Rostos emotivos</strong></td></tr><tr><td>🥰</td><td>Rosto preocupado com corações</td><td>U+1F970</td></tr><tr><td>😍</td><td>Rosto sorridente com olhos de coração</td><td>U+1F60D</td></tr><tr><td>🤩</td><td>Rosto com olhos estrelados</td><td>U+1F60D</td></tr><tr><td>😘</td><td>Rosto mandando um beijo</td><td>U+1F618</td></tr><tr><td>😗</td><td>Cara de beijo</td><td>U+1F617</td></tr><tr><td>😊</td><td>Rosto sorridente</td><td>U+263A</td></tr><tr><td>😚</td><td>Beijando o rosto com os olhos fechados</td><td>U+1F61A</td></tr><tr><td>😙</td><td>Beijando o rosto com olhos sorridentes</td><td>U+1F619</td></tr><tr><td>🥲</td><td>Rosto sorridente com lágrimas</td><td>U+1F972</td></tr><tr><td colspan="3"><strong>Rostos com emojis de língua</strong></td></tr><tr><td>😋</td><td>Rosto saboreando comida deliciosa</td><td>U+1F60B</td></tr><tr><td>😛</td><td>Rosto com língua de fora</td><td>U+1F61B</td></tr><tr><td>😜</td><td>Piscando o rosto com a língua de fora</td><td>U+1F61C</td></tr><tr><td>🤪</td><td>Cara de pateta</td><td>U+1F92A</td></tr><tr><td>😝</td><td>Rosto com língua de fora e olhos bem fechados</td><td>U+1F61D</td></tr><tr><td>🤑</td><td>Cara de dinheiro com língua de dinheiro</td><td>U+1F911</td></tr><tr><td colspan="3"><strong>Emojis de rostos com mãos</strong></td></tr><tr><td>🤗</td><td>Abraços</td><td>U+1F917</td></tr><tr><td>🤭</td><td>Rosto com a mão na boca</td><td>U+1F92D</td></tr><tr><td>🤫</td><td>Rosto calada</td><td>U+1F92B</td></tr><tr><td>🤔</td><td>Rosto pensante</td><td>U+1F914</td></tr><tr><td colspan="3"><strong>Emojis de rostos neutros</strong></td></tr><tr><td>😐</td><td>Rosto neutro</td><td>U+1F610</td></tr><tr><td>🤐</td><td>Rosto com boca com zíper</td><td>U+1F910</td></tr><tr><td>🤨</td><td>Rosto com sobrancelha levantada</td><td>U+1F928</td></tr><tr><td>😑</td><td>Rosto sem expressão</td><td>U+1F611</td></tr><tr><td>😶</td><td>Rosto sem boca, calado</td><td>U+1F636</td></tr><tr><td>😏</td><td>Rosto com sorriso sugestivo</td><td>U+1F60F</td></tr><tr><td>😒</td><td>Rosto sem graça</td><td>U+1F612</td></tr><tr><td>🙄</td><td>Rosto com olhos revirando</td><td>U+1F644</td></tr><tr><td>😬</td><td>Rosto de careta</td><td>U+1F62C</td></tr><tr><td>😮‍💨</td><td>Rosto expirando</td><td>U+1F4A8</td></tr><tr><td>🤥</td><td>Cara de mentira</td><td>U+1F925</td></tr><tr><td colspan="3"><strong>Emojis de rostos sonolentos</strong></td></tr><tr><td>😪</td><td>Rosto de sono</td><td>U+1F62A</td></tr><tr><td>😴</td><td>Rosto adormecido</td><td>U+1F634</td></tr><tr><td>😌</td><td>Rosto aliviado</td><td>U+1F60C</td></tr><tr><td>😔</td><td>Rosto pensativo</td><td>U+1F614</td></tr><tr><td>🤤</td><td>Rosto babando</td><td>U+1F924</td></tr><tr><td colspan="3"><strong>Emojis de rostos doentes</strong></td></tr><tr><td>😷</td><td>Rosto com máscara</td><td>U+1F637</td></tr><tr><td>🤒</td><td>Rosto com termômetro</td><td>U+1F912</td></tr><tr><td>🤕</td><td>Rosto com bandagem</td><td>U+1F915</td></tr><tr><td>🤢</td><td>Rosto enjoado</td><td>U+1F922</td></tr><tr><td>🤮</td><td>Cara de vômito</td><td>U+1F92E</td></tr><tr><td>🤧</td><td>Cara de espirro</td><td>U+1F927</td></tr><tr><td>🥵</td><td>Rosto superaquecido</td><td>U+1F975</td></tr><tr><td>🥶</td><td>Rosto congelante</td><td>U+1F976</td></tr><tr><td>🥴</td><td>Rosto tonto</td><td>U+1F974</td></tr><tr><td>😵</td><td>Rosto com olhos cruzados</td><td>U+1F635</td></tr><tr><td>🤯</td><td>Rosto chocado com cabeça explosiva</td><td>U+1F92F</td></tr><tr><td colspan="3"><strong>Emojis de rostos preocupados</strong></td></tr><tr><td>😕</td><td>Rosto confuso</td><td>U+1F615</td></tr><tr><td>😟</td><td>Rosto preocupado</td><td>U+1F61F</td></tr><tr><td>🙁</td><td>Rosto levemente carrancudo</td><td>U+1F641</td></tr><tr><td>☹️</td><td>Rosto carrancudo</td><td>U+2639</td></tr><tr><td>😮</td><td>Rosto com a boca aberta</td><td>U+1F62E</td></tr><tr><td>😯</td><td>Rosto de surpresa</td><td>U+1F62F</td></tr><tr><td>😲</td><td>Rosto atônito</td><td>U+1F632</td></tr><tr><td>😳</td><td>Rosto corado</td><td>U+1F633</td></tr><tr><td>🥺</td><td>Rosto suplicante</td><td>U+1F97A</td></tr><tr><td>😦</td><td>Rosto carrancudo com a boca aberta</td><td>U+1F626</td></tr><tr><td>😧</td><td>Rosto angustiado</td><td>U+1F627</td></tr><tr><td>😨</td><td>Cara de medo</td><td>U+1F628</td></tr><tr><td>😰</td><td>Rosto ansioso com suor</td><td>U+1F630</td></tr><tr><td>😥</td><td>Rosto triste, mas aliviado</td><td>U+1F625</td></tr><tr><td>😢</td><td>Rosto de choro</td><td>U+1F622</td></tr><tr><td>😭</td><td>Cara chorando alto</td><td>U+1F62D</td></tr><tr><td>😱</td><td>Rosto gritando de medo</td><td>U+1F631</td></tr><tr><td>😖</td><td>Rosto confuso</td><td>U+1F616</td></tr><tr><td>😣</td><td>Rosto perseverante</td><td>U+1F623</td></tr><tr><td>😞</td><td>Rosto desapontado</td><td>U+1F61E</td></tr><tr><td>😓</td><td>Rosto abatido com suor</td><td>U+1F613</td></tr><tr><td>😩</td><td>Rosto cansado</td><td>U+1F629</td></tr><tr><td>😫</td><td>Rosto atormentado</td><td>U+1F62B</td></tr><tr><td>🥱</td><td>Cara de bocejo</td><td>U+1F971</td></tr><tr><td colspan="3"><strong>Rostos negativos</strong></td></tr><tr><td>😤</td><td>Cara com vapor</td><td>U+1F624</td></tr><tr><td>😡</td><td>Rosto enfurecido</td><td>U+1F621</td></tr><tr><td>😠</td><td>Rosto com raiva</td><td>U+1F620</td></tr><tr><td>🤬</td><td>Rosto xingando</td><td>U+1F92C</td></tr><tr><td>😈</td><td>Rosto sorridente com chifres</td><td>U+1F608</td></tr><tr><td>👿</td><td>Rosto irritado com chifres</td><td>U+1F47F</td></tr><tr><td>💀</td><td>Crânio</td><td>U+1F480</td></tr><tr><td>☠</td><td>Crânio e osso cruzado</td><td>U+2620</td></tr><tr><td colspan="3"><strong>Emojis de rostos de fantasia</strong></td></tr><tr><td>💩</td><td>Pilha de cocô</td><td>U+1F4A9</td></tr><tr><td>🤡</td><td>Palhaço</td><td>U+1F921</td></tr><tr><td>👹</td><td>Ogro</td><td>U+1F479</td></tr><tr><td>👺</td><td>Goblin</td><td>U+1F47A</td></tr><tr><td>👻</td><td>Fantasma</td><td>U+1F47B</td></tr><tr><td>👽</td><td>Estraterrestre</td><td>U+1F47D</td></tr><tr><td>👾</td><td>Monstro alienígena</td><td>U+1F47E</td></tr><tr><td>🤖</td><td>Robô</td><td>U+1F916</td></tr><tr><td colspan="3"><strong>Emojis de cara de gato</strong></td></tr><tr><td>😺</td><td>Gato sorridente</td><td>U+1F63A</td></tr><tr><td>😸</td><td>Gato sorridente com olhos sorridentes</td><td>U+1F638</td></tr><tr><td>😹</td><td>Gato com lágrimas de alegria</td><td>U+1F639</td></tr><tr><td>😻</td><td>Gato sorridente com olhos de coração</td><td>U+1F63B</td></tr><tr><td>😼</td><td>Gato com sorriso irônico</td><td>U+1F63C</td></tr><tr><td>😽</td><td>Gato beijando</td><td>U+1F63D</td></tr><tr><td>🙀</td><td>Gato cansado</td><td>U+1F640</td></tr><tr><td>😿</td><td>Gato chorando</td><td>U+1F63F</td></tr><tr><td>😾</td><td>Gato fazendo beicinho</td><td>U+1F63E</td></tr><tr><td colspan="3"><strong>Emojis de cara de macaco</strong></td></tr><tr><td>🙈</td><td>Macaco que não vê</td><td>U+1F648</td></tr><tr><td>🙉</td><td>Macaco que não ouve</td><td>U+1F649</td></tr><tr><td>🙊</td><td>Macaco que não fala</td><td>U+1F64A</td></tr><tr><td colspan="3"><strong>Emojis de emoção</strong></td></tr><tr><td>💋</td><td>Beijo</td><td>U+1F48B</td></tr><tr><td>💌</td><td>Carta de amor</td><td>U+1F48C</td></tr><tr><td>💘</td><td>Coração com flecha</td><td>U+1F498</td></tr><tr><td>💝</td><td>Coração com fita</td><td>U+1F49D</td></tr><tr><td>💖</td><td>Coração com faísca</td><td>U+1F496</td></tr><tr><td>💗</td><td>Coração em crescimento</td><td>U+1F497</td></tr><tr><td>💓</td><td>Coração batendo</td><td>U+1F493</td></tr><tr><td>💞</td><td>Corações giratório</td><td>U+1F49E</td></tr><tr><td>💕</td><td>Dois corações</td><td>U+1F495</td></tr><tr><td>💟</td><td>Decoração de coração</td><td>U+1F49F</td></tr><tr><td>❣</td><td>Exclamação do coração</td><td>U+2763</td></tr><tr><td>💔</td><td>Coração partido</td><td>U+1F494</td></tr><tr><td>❤️‍🔥</td><td>Coração em chamas</td><td>U+2764</td></tr><tr><td>❤️‍🩹</td><td>Coração enfaixado</td><td>U+2764</td></tr><tr><td>❤️</td><td>Coração preto</td><td>U+2764</td></tr><tr><td>🧡</td><td>Coração laranja</td><td>U+1F9E1</td></tr><tr><td>💛</td><td>Coração amarelo</td><td>U+1F49B</td></tr><tr><td>💚</td><td>Coração verde</td><td>U+1F49A</td></tr><tr><td>💙</td><td>Coração azul</td><td>U+1F499</td></tr><tr><td>💜</td><td>Coração roxo</td><td>U+1F49C</td></tr><tr><td>🤎</td><td>Coração marrom</td><td>U+1F90E</td></tr><tr><td>🖤</td><td>Coração preto</td><td>U+1F5A4</td></tr><tr><td>🤍</td><td>Coração branco</td><td>U+1F90D</td></tr><tr><td>💯</td><td>Cem (correto)</td><td>U+1F4AF</td></tr><tr><td>💢</td><td>Raiva</td><td>U+1F4A2</td></tr><tr><td>💥</td><td>Colisão</td><td>U+1F4A5</td></tr><tr><td>💫</td><td>Tonto</td><td>U+1F4AB</td></tr><tr><td>💦</td><td>Gotas de suor</td><td>U+1F4A6</td></tr><tr><td>💨</td><td>Fugindo</td><td>U+1F4A8</td></tr><tr><td>🕳</td><td>Buraco</td><td>U+1F573</td></tr><tr><td>💣</td><td>Bomba</td><td>U+1F4A3</td></tr><tr><td>💬</td><td>Balão de mensagem</td><td>U+1F4AC</td></tr><tr><td>👁️‍🗨️</td><td>Olho no balão de mensagem</td><td>U+1F441</td></tr><tr><td>🗨</td><td>Balão de fala à esquerda</td><td>U+1F5E8</td></tr><tr><td>🗯</td><td>Balão de fala com raiva</td><td>U+1F5EF</td></tr><tr><td>💭</td><td>Balão de pensamento</td><td>U+1F4AD</td></tr><tr><td>💤</td><td>Sono</td><td>U+1F4A4</td></tr><tr><td colspan="3"><strong>Emojis de mãos e outras partes do corpo</strong></td></tr><tr><td>👋</td><td>Acenando com a mão</td><td>U+1F44B</td></tr><tr><td>🤚</td><td>Costas da mão levantadas</td><td>U+1F91A</td></tr><tr><td>🖐</td><td>Mãos com dedo estendido</td><td>U+1F590</td></tr><tr><td>✋</td><td>Mão levantada</td><td>U+270B</td></tr><tr><td>🖖</td><td>Saudação vulcana</td><td>U+1F596</td></tr><tr><td>👌</td><td>OK</td><td>U+1F44C</td></tr><tr><td>🤌</td><td>Dedos pinçados</td><td>U+1F90C</td></tr><tr><td>🤏</td><td>Mão beliscada</td><td>U+1F90F</td></tr><tr><td>✌</td><td>Mão da vitória</td><td>U+270C</td></tr><tr><td>🤞</td><td>Dedos cruzados</td><td>U+1F91E</td></tr><tr><td>🤟</td><td>Eu te amo</td><td>U+1F91F</td></tr><tr><td>🤘</td><td>Sinal de chifre</td><td>U+1F918</td></tr><tr><td>🤙</td><td>Sinal de me chame</td><td>U+1F919</td></tr><tr><td>👈</td><td>Dedo indicador apontando para a esquerda</td><td>U+1F448</td></tr><tr><td>👉</td><td>Dedo indicador apontando para a direita</td><td>U+1F449</td></tr><tr><td>👆</td><td>Dedo indicador apontando para cima</td><td>U+1F446</td></tr><tr><td>👇</td><td>Dedo indicador apontando para baixo</td><td>U+1F447</td></tr><tr><td>🖕</td><td>Dedo do meio</td><td>U+1F595</td></tr><tr><td>☝</td><td>Dedo indicador de forehand apontando para cima</td><td>U+261D</td></tr><tr><td>👍</td><td>Afirmativo</td><td>U+1F44D</td></tr><tr><td>👎</td><td>Polegar para baixo</td><td>U+1F44E</td></tr><tr><td>✊</td><td>Punho levantado</td><td>U+270A</td></tr><tr><td>👊</td><td>Punho</td><td>U+1F44A</td></tr><tr><td>🤛</td><td>Punho virado para a esquerda</td><td>U+1F91B</td></tr><tr><td>🤜</td><td>Punho virado para a direita</td><td>U+1F91C</td></tr><tr><td>👏</td><td>Mãos de aplauso</td><td>U+1F44F</td></tr><tr><td>🙌</td><td>Mãos levantadas</td><td>U+1F64C</td></tr><tr><td>👐</td><td>Mãos abertas</td><td>U+1F450</td></tr><tr><td>🤲</td><td>As palmas das mãos juntas</td><td>U+1F932</td></tr><tr><td>🤝</td><td>Aperto de mão</td><td>U+1F91D</td></tr><tr><td>🙏</td><td>Mãos em oração</td><td>U+1F64F</td></tr><tr><td>✍</td><td>Mão escrevendo</td><td>U+270D</td></tr><tr><td>💅</td><td>Mão com esmalte</td><td>U+1F485</td></tr><tr><td>🤳</td><td>Mão de selfie</td><td>U+1F933</td></tr><tr><td>💪</td><td>Bíceps flexionado</td><td>U+1F4AA</td></tr><tr><td>🦾</td><td>Braço mecânico</td><td>U+1F9BE</td></tr><tr><td>🦵</td><td>Perna</td><td>U+1F9B5</td></tr><tr><td>🦿</td><td>Perna mecânica</td><td>U+1F9BF</td></tr><tr><td>🦶</td><td>Pé</td><td>U+1F9B6</td></tr><tr><td>👂</td><td>Orelha</td><td>U+1F442</td></tr><tr><td>🦻</td><td>Ouvido com aparelho auditivo</td><td>U+1F9BB</td></tr><tr><td>👃</td><td>Nariz</td><td>U+1F443</td></tr><tr><td>🧠</td><td>Cérebro</td><td>U+1F9E0</td></tr><tr><td>👣</td><td>Pegada</td><td>U+1F463</td></tr><tr><td>🫀</td><td>Coração mecânico</td><td>U+1FAC0</td></tr><tr><td>🫁</td><td>Pulmões</td><td>U+1FAC1</td></tr><tr><td>🦷</td><td>Dente</td><td>U+1F9B7</td></tr><tr><td>🦴</td><td>Osso</td><td>U+1F9B7</td></tr><tr><td>👀</td><td>Olhos</td><td>U+1F440</td></tr><tr><td>👁</td><td>Olho</td><td>U+1F441</td></tr><tr><td>👅</td><td>Nariz</td><td>U+1F445</td></tr><tr><td>👄</td><td>Boca</td><td>U+1F444</td></tr><tr><td colspan="3"><strong>Emojis de pessoas</strong></td></tr><tr><td>🧑</td><td>Pessoa</td><td>U+1F9D1</td></tr><tr><td>👶</td><td>Bebê</td><td>U+1F476</td></tr><tr><td>🧒</td><td>Filho</td><td>U+1F9D2</td></tr><tr><td>👦</td><td>Menino</td><td>U+1F466</td></tr><tr><td>👧</td><td>Menina</td><td>U+1F467</td></tr><tr><td>👱</td><td>Pessoa com cabelo loiro</td><td>U+1F471</td></tr><tr><td>👨</td><td>Cara</td><td>U+1F468</td></tr><tr><td>🧔</td><td>Pessoa barbuda</td><td>U+1F9D4</td></tr><tr><td>🧔‍♂‍</td><td>Homem barbudo</td><td>U+1F9D4</td></tr><tr><td>🧔‍♀‍</td><td>Mulher barbuda</td><td>U+1F9D4</td></tr><tr><td>👨‍🦰</td><td>Homem com cabelo ruivo</td><td>U+1F468</td></tr><tr><td>👨‍🦱</td><td>Homem com cabelo cacheado</td><td>U+1F9B1</td></tr><tr><td>👨‍🦳</td><td>Homem de cabelo branco</td><td>U+200D</td></tr><tr><td>👨‍🦲</td><td>Homem careca</td><td>U+1F468</td></tr><tr><td>👩‍⚕</td><td>Mulher</td><td>U+1F469</td></tr><tr><td>👩‍🦰</td><td>Mulher com cabelo ruivo</td><td>U+1F469</td></tr><tr><td>👩‍🦱</td><td>Mulher com cabelo cacheado</td><td>U+1F469</td></tr><tr><td>👩‍🦳</td><td>Mulher de cabelo branco</td><td>U+1F469</td></tr><tr><td>👩‍🦲</td><td>Mulher calva</td><td>U+1F469</td></tr><tr><td>👱‍♀‍</td><td>Mulher com cabelo loiro</td><td>U+1F471</td></tr><tr><td>👱‍♂‍</td><td>Homem com cabelo loiro</td><td>U+1F471</td></tr><tr><td>🧓</td><td>Pessoa velha</td><td>U+1F9D3</td></tr><tr><td>👴</td><td>Homem velho</td><td>U+1F474</td></tr><tr><td>👵</td><td>Mulher velha</td><td>U+1F475</td></tr><tr><td>🙍</td><td>Pessoa franzindo a testa</td><td>U+1F64D</td></tr><tr><td>🙍‍♂‍</td><td>Homem franzindo a testa</td><td>U+1F64D</td></tr><tr><td>🙍‍♀‍</td><td>Mulher franzindo a testa</td><td>U+1F64D</td></tr><tr><td>🙎</td><td>Pessoa fazendo beicinho</td><td>U+1F64E</td></tr><tr><td>🙎‍♂‍</td><td>Homem fazendo beicinho</td><td>U+1F64E</td></tr><tr><td>🙎‍♀‍</td><td>Mulher fazendo beicinho</td><td>U+1F64E</td></tr><tr><td>🙅</td><td>Pessoa gesticulando não</td><td>U+1F645</td></tr><tr><td>🙅‍♂‍</td><td>Homem gesticulando não</td><td>U+1F645</td></tr><tr><td>🙅‍♀‍</td><td>Mulher gesticulando não</td><td>U+1F645</td></tr><tr><td>🙆</td><td>Pessoa se alongando</td><td>U+1F646</td></tr><tr><td>🙆‍♂‍</td><td>Homem se alongando</td><td>U+1F646</td></tr><tr><td>🙆‍♀‍</td><td>Mulher se alongando</td><td>U+1F646</td></tr><tr><td>💁</td><td>Pessoa inclinando a mão</td><td>U+1F481</td></tr><tr><td>💁‍♂‍</td><td>Homem inclinando a mão</td><td>U+1F481</td></tr><tr><td>💁‍♀‍</td><td>Mulher inclinando a mão</td><td>U+1F481</td></tr><tr><td>🙋</td><td>Pessoa levantando a mão</td><td>U+1F64B</td></tr><tr><td>🙋‍♂‍</td><td>Homem levantando a mão</td><td>U+1F64B</td></tr><tr><td>🙋‍♀‍</td><td>Mulher levantando a mão</td><td>U+1F64B</td></tr><tr><td>🧏</td><td>Pessoa surda</td><td>U+1F64B</td></tr><tr><td>🧏‍♂‍</td><td>Homem surdo</td><td>U+1F9CF</td></tr><tr><td>🧏‍♀‍</td><td>Mulher surda</td><td>U+2640</td></tr><tr><td>🙇</td><td>Pessoa se curvando</td><td>U+1F647</td></tr><tr><td>🙇‍♂‍</td><td>Homem se curvando</td><td>U+1F647</td></tr><tr><td>🙇‍♀‍</td><td>Mulher se curvando</td><td>U+200D</td></tr><tr><td>🤦</td><td>Pessoa com a mão no rosto</td><td>U+1F926</td></tr><tr><td>🤦‍♂‍</td><td>Homem com a mão no rosto</td><td>U+1F926</td></tr><tr><td>🤦‍♀‍</td><td>Mulher com a mão no rosto</td><td>U+1F926</td></tr><tr><td>🤷</td><td>Pessoa dando de ombros</td><td>U+1F937</td></tr><tr><td>🤷‍♂‍</td><td>Homem dando de ombros</td><td>U+1F937</td></tr><tr><td>🤷‍♀‍</td><td>Mulher dando de ombros</td><td>U+FE0F</td></tr><tr><td>🧑‍⚕‍</td><td>Profissional de saúde</td><td>U+1F9D1</td></tr><tr><td>👨‍⚕‍</td><td>Homem profissional de saúde</td><td>U+2695</td></tr><tr><td>👩‍⚕‍</td><td>Mulher profissional de saúde</td><td>U+1F469</td></tr><tr><td>🧑‍🎓</td><td>Aluna</td><td>U+1F9D1</td></tr><tr><td>👨‍🎓</td><td>Aluno</td><td>U+1F468</td></tr><tr><td>🧑‍🏫</td><td>Professor</td><td>U+1F9D1</td></tr><tr><td>👨‍🏫</td><td>Homem professor</td><td>U+1F468</td></tr><tr><td>👩‍🏫</td><td>Mulher professora</td><td>U+1F3EB</td></tr><tr><td>🧑‍⚖‍</td><td>Juiz</td><td>U+1F9D1</td></tr><tr><td>👨‍⚖‍</td><td>Homem juiz</td><td>U+1F468</td></tr><tr><td>👩‍⚖‍</td><td>Mulher juíza</td><td>U+1F469</td></tr><tr><td>🧑‍🌾</td><td>Agricultor</td><td>U+200D</td></tr><tr><td>👨‍🌾</td><td>Homem agricultor</td><td>U+1F468</td></tr><tr><td>👩‍🌾</td><td>Mulher agricultora</td><td>U+1F469</td></tr><tr><td>🧑‍🍳</td><td>Cozinheiro</td><td>U+1F9D1</td></tr><tr><td>👨‍🍳</td><td>Homem cozinheiro</td><td>U+200D</td></tr><tr><td>👩‍🍳</td><td>Mulher cozinheira</td><td>U+1F469</td></tr><tr><td>🧑‍🔧</td><td>Mecânico</td><td>U+1F9D1</td></tr><tr><td>👨‍🔧</td><td>Homem mecânico</td><td>U+1F527</td></tr><tr><td>👩‍🔧</td><td>Mulher mecânica</td><td>U+1F469</td></tr><tr><td>🧑‍🏭</td><td>Operário</td><td>U+1F9D1</td></tr><tr><td>👨‍🏭</td><td>Homem operário</td><td>U+1F468</td></tr><tr><td>👩‍🏭</td><td>Mulher operária</td><td>U+1F469</td></tr><tr><td>🧑‍💼</td><td>Trabalhador de escritório</td><td>U+1F9D1</td></tr><tr><td>👨‍💼</td><td>Homem trabalhador de escritório</td><td>U+1F4BC</td></tr><tr><td>👩‍💼</td><td>Mulher trabalhadora de escritório</td><td>U+1F469</td></tr><tr><td>🧑‍🔬</td><td>Cientista</td><td>U+1F9D1</td></tr><tr><td>👨‍🔬</td><td>Homem cientista</td><td>U+1F468</td></tr><tr><td>👩‍🔬</td><td>Mulher cientista</td><td>U+1F52C</td></tr><tr><td>🧑‍💻</td><td>Tecnólogo</td><td>U+1F9D1</td></tr><tr><td>👨‍💻</td><td>Homem tecnólogo</td><td>U+1F468</td></tr><tr><td>👩‍💻</td><td>Mulher tecnóloga</td><td>U+1F469</td></tr><tr><td>🧑‍🎤</td><td>Cantor</td><td>U+1F3A4</td></tr><tr><td>👨‍🎤</td><td>Homem cantor</td><td>U+1F468</td></tr><tr><td>👩‍🎤</td><td>Mulher cantora</td><td>U+1F469</td></tr><tr><td>🧑‍🎨</td><td>Artista</td><td>U+1F9D1</td></tr><tr><td>👨‍🎨</td><td>Homem artista</td><td>U+1F468</td></tr><tr><td>👩‍🎨</td><td>Mulher artista</td><td>U+1F469</td></tr><tr><td>🧑‍✈‍</td><td>Piloto</td><td>U+1F9D1</td></tr><tr><td>👨‍✈‍</td><td>Homem piloto</td><td>U+1F468</td></tr><tr><td>👩‍✈‍</td><td>Mulher piloto</td><td>U+1F469</td></tr><tr><td>🧑‍🚀</td><td>Astronauta</td><td>U+1F9D1</td></tr><tr><td>👨‍🚀</td><td>Homem astronauta</td><td>U+1F468</td></tr><tr><td>👩‍🚀</td><td>Mulher astronauta</td><td>U+1F469</td></tr><tr><td>🧑‍🚒</td><td>Bombeiro</td><td>U+1F9D1</td></tr><tr><td>👨‍🚒</td><td>homem bombeiro</td><td>U+200D</td></tr><tr><td>👩‍🚒</td><td>Mulher bombeiro</td><td>U+1F692</td></tr><tr><td>👮</td><td>Polícia</td><td>U+1F46E</td></tr><tr><td>👮‍♂‍</td><td>Homem policial</td><td>U+1F46E</td></tr><tr><td>👮‍♀‍</td><td>Mulher policial</td><td>U+1F46E</td></tr><tr><td>🕵</td><td>Detetive</td><td>U+1F575</td></tr><tr><td>🕵️‍♂‍</td><td>Homem detetive</td><td>U+1F575</td></tr><tr><td>🕵️‍♀‍</td><td>Mulher detetive</td><td>U+1F575</td></tr><tr><td>💂</td><td>Guarda</td><td>U+1F482</td></tr><tr><td>💂‍♂‍</td><td>Homem guarda</td><td>U+2642</td></tr><tr><td>💂‍♀‍</td><td>Mulher guarda</td><td>U+2640</td></tr><tr><td>🥷</td><td>Ninja</td><td>U+1F97</td></tr><tr><td>👷</td><td>Trabalhador da construção</td><td>U+1F477</td></tr><tr><td>👷‍♂‍</td><td>Trabalhador da construção</td><td>U+200D</td></tr><tr><td>👷‍♀‍</td><td>Trabalhadora da construção</td><td>U+2640</td></tr><tr><td>🤴</td><td>Principe</td><td>U+1F934</td></tr><tr><td>👸</td><td>Princesa</td><td>U+1F478</td></tr><tr><td>👳</td><td>Pessoa usando turbante</td><td>U+1F473</td></tr><tr><td>👳‍♂‍</td><td>Homem usando turbante</td><td>U+200D</td></tr><tr><td>👳‍♀‍</td><td>Mulher usando turbante</td><td>U+2640</td></tr><tr><td>👲</td><td>Pessoa com solidéu</td><td>U+1F472</td></tr><tr><td>🧕</td><td>Mulher com lenço na cabeça</td><td>U+1F9D5</td></tr><tr><td>🤵</td><td>Pessoa de smoking</td><td>U+1F935</td></tr><tr><td>🤵‍♂‍</td><td>Homem de smoking</td><td>U+1F935</td></tr><tr><td>🤵‍♀‍</td><td>Mulher de smoking</td><td>U+1F935</td></tr><tr><td>👰</td><td>Pessoa de véu</td><td>U+1F470</td></tr><tr><td>👰‍♂‍</td><td>Homem de véu</td><td>U+1F470</td></tr><tr><td>👰‍♀‍</td><td>Mulher de véu</td><td>U+200D</td></tr><tr><td>🤰</td><td>Mulher grávida</td><td>U+1F930</td></tr><tr><td>🤱</td><td>Amamentação</td><td>U+1F931</td></tr><tr><td>🧑‍🍼</td><td>Pessoa alimentando bebê</td><td>U+1F37C</td></tr><tr><td>👩‍🍼</td><td>Mulher alimentando bebê</td><td>U+1F469</td></tr><tr><td>👨‍🍼</td><td>Homem alimentando bebê</td><td>U+200D</td></tr><tr><td>👼</td><td>Bebê anjo</td><td>U+1F47C</td></tr><tr><td>🎅</td><td>Papai Noel</td><td>U+1F385</td></tr><tr><td>🤶</td><td>Senhora Noel</td><td>U+1F936</td></tr><tr><td>🧑‍🎄</td><td>Mx. Noel</td><td>U+1F9D1</td></tr><tr><td>🦸</td><td>Super-herói</td><td>U+1F9B8</td></tr><tr><td>🦸‍♂‍</td><td>Homem super-herói</td><td>U+200D</td></tr><tr><td>🦸‍♀‍</td><td>Mulher super-heroína</td><td>U+FE0F</td></tr><tr><td>🦹</td><td>Super-vilão</td><td>U+1F9B9</td></tr><tr><td>🦹‍♂‍</td><td>Homem super-vilão</td><td>U+2642</td></tr><tr><td>🦹‍♀‍</td><td>Mulher super-vilã</td><td>U+200D</td></tr><tr><td>🧙</td><td>Mago</td><td>U+1F9D9</td></tr><tr><td>🧙‍♂‍</td><td>Homem mago</td><td>U+1F9D9</td></tr><tr><td>🧙‍♀‍</td><td>Mulher maga</td><td>U+2640</td></tr><tr><td>🧚</td><td>Fadas</td><td>U+1F9DA</td></tr><tr><td>🧚‍♂‍</td><td>Homem fada</td><td>U+2642</td></tr><tr><td>🧚‍♀‍</td><td>Mulher fada</td><td>U+200D</td></tr><tr><td>🧛</td><td>Vampiro</td><td>U+1F9DB</td></tr><tr><td>🧛‍♂‍</td><td>Homem vampiro</td><td>U+2642</td></tr><tr><td>🧛‍♀‍</td><td>Mulher vampira</td><td>U+FE0F</td></tr><tr><td>🧜</td><td>Sereia</td><td>U+1F9DC</td></tr><tr><td>🧜‍♂‍</td><td>Tritão</td><td>U+200D</td></tr><tr><td>🧜‍♀‍</td><td>Sereia</td><td>U+1F9DC</td></tr><tr><td>🧝</td><td>Elfo</td><td>U+1F9DD</td></tr><tr><td>🧝‍♂‍</td><td>Homem elfo</td><td>U+2642</td></tr><tr><td>🧝‍♀‍</td><td>Mulher elfa</td><td>U+200D</td></tr><tr><td>🧞</td><td>Gênio</td><td>U+1F9DE</td></tr><tr><td>🧞‍♂‍</td><td>Homem gênio</td><td>U+200D</td></tr><tr><td>🧞‍♀‍</td><td>Mulher gênio</td><td>U+2640</td></tr><tr><td>🧟</td><td>Zumbi</td><td>U+1F9DF</td></tr><tr><td>🧟‍♂‍</td><td>Homem zumbi</td><td>U+2642</td></tr><tr><td>🧟‍♀‍</td><td>Mulher zumbi</td><td>U+FE0F</td></tr><tr><td>💆</td><td>Pessoa recebendo massagem</td><td>U+1F486</td></tr><tr><td>💆‍♂‍</td><td>Homem recebendo massagem</td><td>U+200D</td></tr><tr><td>💆‍♀‍</td><td>Mulher recebendo massagem</td><td>U+2640</td></tr><tr><td>💇</td><td>Pessoa cortando o cabelo</td><td>U+1F487</td></tr><tr><td>💇‍♂‍</td><td>Homem cortando o cabelo</td><td>U+200D</td></tr><tr><td>💇‍♀‍</td><td>Mulher cortando o cabelo</td><td>U+2640</td></tr><tr><td>🚶</td><td>Pessoa andando</td><td>U+1F6B6</td></tr><tr><td>🚶‍♂‍</td><td>Homem andando</td><td>U+200D</td></tr><tr><td>🚶‍♀‍</td><td>Mulher andando</td><td>U+FE0F</td></tr><tr><td>🧍</td><td>Pessoa em pé</td><td>U+1F9CD</td></tr><tr><td>🧍‍♂‍</td><td>Homem de pé</td><td>U+200D</td></tr><tr><td>🧍‍♀‍</td><td>Mulher em pé</td><td>U+FE0F</td></tr><tr><td>🧎</td><td>Pessoa ajoelhada</td><td>U+1F9CE</td></tr><tr><td>🧎‍♂‍</td><td>Homem ajoelhado</td><td>U+200D</td></tr><tr><td>🧎‍♀‍</td><td>Mulher ajoelhada</td><td>U+FE0F</td></tr><tr><td>🧑‍🦯</td><td>Pessoa com bengala</td><td>U+200D</td></tr><tr><td>👨‍🦯</td><td>Homem com bengala</td><td>U+1F468</td></tr><tr><td>👩‍🦯</td><td>Mulher com bengala</td><td>U+1F9AF</td></tr><tr><td>🧑‍🦼</td><td>Pessoa em cadeira de rodas motorizada</td><td>U+1F9D1</td></tr><tr><td>👨‍🦼</td><td>Homem em cadeira de rodas motorizada</td><td>U+200D</td></tr><tr><td>👩‍🦼</td><td>Mulher em cadeira de rodas motorizada</td><td>U+1F9BC</td></tr><tr><td>🧑‍🦽</td><td>Pessoa em cadeira de rodas manual</td><td>U+1F9D1</td></tr><tr><td>👨‍🦽</td><td>Homem em cadeira de rodas manual</td><td>U+200D</td></tr><tr><td>👩‍🦽</td><td>Mulher em cadeira de rodas motorizada</td><td>U+1F9BD</td></tr><tr><td>🏃</td><td>Pessoa correndo</td><td>U+1F3C3</td></tr><tr><td>🏃‍♂‍</td><td>Homem correndo</td><td>U+2642</td></tr><tr><td>🏃‍♀‍</td><td>Mulher correndo</td><td>U+2640</td></tr><tr><td>💃</td><td>Mulher dançando</td><td>U+1F483</td></tr><tr><td>🕺</td><td>Homem dançando</td><td>U+1F57A</td></tr><tr><td>🕴</td><td>Pessoa de terno levitando</td><td>U+1F574</td></tr><tr><td>👯</td><td>Pessoas com orelhas de coelho</td><td>U+1F46F</td></tr><tr><td>👯‍♂‍</td><td>Homens com orelhas de coelho</td><td>U+200D</td></tr><tr><td>👯‍♀‍</td><td>Mulheres em orelhas de coelho</td><td>U+2640</td></tr><tr><td>🧖</td><td>Pessoa na sala de vapor</td><td>U+1F9D6</td></tr><tr><td>🧖‍♂‍</td><td>Homem na sala de vapor</td><td>U+200D</td></tr><tr><td>🧖‍♀‍</td><td>Mulher na sala de vapor</td><td>U+200D</td></tr><tr><td>🧗</td><td>Pessoa escalando</td><td>U+1F9D7</td></tr><tr><td>🧗‍♂‍</td><td>Homem escalando</td><td>U+200D</td></tr><tr><td>🧗‍♀‍</td><td>Mulher escalando</td><td>U+2640</td></tr><tr><td>🤺</td><td>Pessoa de esgrima</td><td>U+1F93A</td></tr><tr><td>🏇</td><td>Corrida de cavalo</td><td>U+1F3C7</td></tr><tr><td>⛷</td><td>Esquiador</td><td>U+26F7</td></tr><tr><td>🏂</td><td>Bola de neve</td><td>U+1F3C2</td></tr><tr><td>🏌</td><td>Pessoa jogando golfe</td><td>U+1F3CC</td></tr><tr><td>🏌️‍♂‍</td><td>Homem jogando golfe</td><td>U+FE0F</td></tr><tr><td>🏌️‍♀‍</td><td>Mulher jogando golfe</td><td>U+200D</td></tr><tr><td>🏄</td><td>Pessoa surfando</td><td>U+1F3C4</td></tr><tr><td>🏄‍♂‍</td><td>Homem surfando</td><td>U+2642</td></tr><tr><td>🏄‍♀‍</td><td>Mulher surfando</td><td>U+2640</td></tr><tr><td>🚣</td><td>Pessoa de barco a remo</td><td>U+1F6A3</td></tr><tr><td>🚣‍♂‍</td><td>Homem de barco a remo</td><td>U+2642</td></tr><tr><td>🚣‍♀‍</td><td>Mulher de barco a remo</td><td>U+FE0F</td></tr><tr><td>🏊</td><td>Pessoa nadando</td><td>U+1F3CA</td></tr><tr><td>🏊‍♂‍</td><td>Homem nadando</td><td>U+2642</td></tr><tr><td>🏊‍♀‍</td><td>Mulher nadando</td><td>U+FE0F</td></tr><tr><td>⛹</td><td>Pessoa jogando bola</td><td>U+26F9</td></tr><tr><td>⛹️‍♂‍</td><td>Homem jogando bola</td><td>U+FE0F</td></tr><tr><td>⛹️‍♀‍</td><td>Mulher jogando bola</td><td>U+2640</td></tr><tr><td>🏋</td><td>Pessoa levantando peso</td><td>U+1F3CB</td></tr><tr><td>🏋️‍♂‍</td><td>Homem levantando peso</td><td>U+FE0F</td></tr><tr><td>🏋️‍♀‍</td><td>Mulher levantando peso</td><td>U+2640</td></tr><tr><td>🚴</td><td>Pessoa andando de bicicleta</td><td>U+1F6B4</td></tr><tr><td>🚴‍♂‍</td><td>Homem andando de bicicleta</td><td>U+2642</td></tr><tr><td>🚴‍♀‍</td><td>Mulher andando de bicicleta</td><td>U+FE0F</td></tr><tr><td>🚵</td><td>Pessoa de bicicleta de montanha</td><td>U+1F6B5</td></tr><tr><td>🚵‍♂‍</td><td>Homem de bicicleta de montanha</td><td>U+2642</td></tr><tr><td>🚵‍♀‍</td><td>Mulher de bicicleta de montanha</td><td>U+2640</td></tr><tr><td>🤸</td><td>Pessoa brincando</td><td>U+1F938</td></tr><tr><td>🤸‍♂‍</td><td>Homem brincando</td><td>U+200D</td></tr><tr><td>🤸‍♀‍</td><td>Mulher brincando</td><td>U+FE0F</td></tr><tr><td>🤼</td><td>Pessoas lutando</td><td>U+1F93C</td></tr><tr><td>🤼‍♂‍</td><td>Homens lutando</td><td>U+200D</td></tr><tr><td>🤼‍♀‍</td><td>Mulheres lutando</td><td>U+2640</td></tr><tr><td>🤽</td><td>Pessoa jogando pólo aquático</td><td>U+1F93D</td></tr><tr><td>🤽‍♂‍</td><td>Homem jogando pólo aquático</td><td>U+FE0F</td></tr><tr><td>🤽‍♀‍</td><td>Mulher jogando pólo aquático</td><td>U+200D</td></tr><tr><td>🤾</td><td>Pessoa jogando handebol</td><td>U+1F93E</td></tr><tr><td>🤾‍♂‍</td><td>Homem jogando handebol</td><td>U+200D</td></tr><tr><td>🤾‍♀‍</td><td>Mulher jogando handebol</td><td>U+FE0F</td></tr><tr><td>🤹</td><td>Pessoa fazendo malabarismo</td><td>U+1F939</td></tr><tr><td>🤹‍♂‍</td><td>Homem fazendo malabarismo</td><td>U+200D</td></tr><tr><td>🤹‍♀‍</td><td>Mulher fazendo malabarismo</td><td>U+FE0F</td></tr><tr><td>🧘</td><td>Pessoa em posição de lótus</td><td>U+1F9D8</td></tr><tr><td>🧘‍♂‍</td><td>Homem em posição de lótus</td><td>U+200D</td></tr><tr><td>🧘‍♀‍</td><td>Mulher em posição de lótus</td><td>U+2640</td></tr><tr><td>🛀</td><td>Pessoa tomando banho</td><td>U+1F6C0</td></tr><tr><td>🛌</td><td>Pessoa na cama</td><td>U+1F6CC</td></tr><tr><td>👪</td><td>Família</td><td>U+1F46A</td></tr><tr><td>👨‍👩‍👦</td><td>Família: homem, mulher e menino</td><td>U+200D</td></tr><tr><td>👨‍👩‍👧</td><td>Família: homem, mulher e menina</td><td>U+1F469</td></tr><tr><td>👨‍👩‍👧‍👦</td><td>Família: homem, mulher, menino e menina</td><td>U+200D</td></tr><tr><td>👨‍👩‍👦‍👦</td><td>Família: homem, mulher e dois meninos</td><td>U+1F466</td></tr><tr><td>👨‍👩‍👧‍👧</td><td>Família: homem, mulher e duas meninas</td><td>U+200D</td></tr><tr><td>👨‍👨‍👦</td><td>Família: dois homens e um menino</td><td>U+1F466</td></tr><tr><td>👨‍👨‍👧</td><td>Família: dois homens e uma menina</td><td>U+200D</td></tr><tr><td>👨‍👨‍👧‍👦</td><td>Família: dois homens, menina e menino</td><td>U+1F466</td></tr><tr><td>👨‍👨‍👦‍👦</td><td>Família: dois homens e dois meninos</td><td>U+200D</td></tr><tr><td>👨‍👨‍👧‍👧</td><td>Família: dois homens e duas meninas</td><td>U+1F467</td></tr><tr><td>👩‍👩‍👦</td><td>Família: duas mulheres e um menino</td><td>U+1F466</td></tr><tr><td>👩‍👩‍👧</td><td>Família: duas mulheres e uma menina</td><td>U+1F467</td></tr><tr><td>👩‍👩‍👧‍👦</td><td>Família: duas mulheres, menina e menino</td><td>U+1F466</td></tr><tr><td>👩‍👩‍👦‍👦</td><td>Família: duas mulheres e dois meninos</td><td>U+1F466</td></tr><tr><td>👩‍👩‍👧‍👧</td><td>Família: duas mulheres e duas meninas</td><td>U+1F467</td></tr><tr><td>👨‍👦</td><td>Família: homem e menino</td><td>U+1F466</td></tr><tr><td>👨‍👦‍👦</td><td>Família: homem e dois meninos</td><td>U+1F466</td></tr><tr><td>👨‍👧</td><td>Família: homem e menina</td><td>U+1F467</td></tr><tr><td>👨‍👧‍👦</td><td>Família: homem, menina e menino</td><td>U+1F466</td></tr><tr><td>👨‍👧‍👧</td><td>Família: homem e duas meninas</td><td>U+1F467</td></tr><tr><td>👩‍👦</td><td>Família: mulher e menino</td><td>U+1F466</td></tr><tr><td>👩‍👦‍👦</td><td>Família: mulher e dois meninos</td><td>U+1F466</td></tr><tr><td>👩‍👧</td><td>Família: mulher e menina</td><td>U+1F467</td></tr><tr><td>👩‍👧‍👦</td><td>Família: mulher, menina e menino</td><td>U+1F466</td></tr><tr><td>👩‍👧‍👧</td><td>Família: mulher e duas meninas</td><td>U+1F467</td></tr><tr><td>🧑‍🤝‍🧑</td><td>Pessoas de mãos dadas</td><td>U+1F9D1</td></tr><tr><td>👭</td><td>Mulheres de mãos dadas</td><td>U+1F46D</td></tr><tr><td>👫</td><td>Mulher e homem de mãos dadas</td><td>U+1F46B</td></tr><tr><td>👬</td><td>Homens de mãos dadas</td><td>U+1F46C</td></tr><tr><td>💏</td><td>Beijo</td><td>U+1F48F</td></tr><tr><td>👩‍❤‍💋‍👨</td><td>Mulher e homem se beijando</td><td>U+200D</td></tr><tr><td>👨‍❤‍💋‍👨</td><td>Homem e homem se beijando</td><td>U+200D</td></tr><tr><td>👩‍❤‍💋‍👩</td><td>Mulher e mulher se beijando</td><td>U+1F48B</td></tr><tr><td>💑</td><td>Casal com coração</td><td>U+1F491</td></tr><tr><td>🗣</td><td>Pessoa falando</td><td>U+1F5E3</td></tr><tr><td>👤</td><td>Busto em silhueta</td><td>U+1F464</td></tr><tr><td>👥</td><td>Bustos em silhueta</td><td>U+1F465</td></tr><tr><td>🫂</td><td>Pessoas abraçando</td><td>U+1FAC2</td></tr><tr><td colspan="3"><strong>Emojis de animais e natureza</strong></td></tr><tr><td>🐵</td><td>Cara de macaco</td><td>U+1F435</td></tr><tr><td>🐒</td><td>Macaco</td><td>U+1F412</td></tr><tr><td>🦍</td><td>Gorila</td><td>U+1F98D</td></tr><tr><td>🦧</td><td>Orangotango</td><td>U+1F9A7</td></tr><tr><td>🐶</td><td>Cara de cão</td><td>U+1F436</td></tr><tr><td>🐕</td><td>Cão</td><td>U+1F415</td></tr><tr><td>🦮</td><td>Cão guia</td><td>U+1F9AE</td></tr><tr><td>🐕‍🦺</td><td>Cão de serviço</td><td>U+1F415</td></tr><tr><td>🐩</td><td>Poodle</td><td>U+1F429</td></tr><tr><td>🐺</td><td>Lobo</td><td>U+1F43A</td></tr><tr><td>🦊</td><td>Raposa</td><td>U+1F98A</td></tr><tr><td>🦝</td><td>Guaxinim</td><td>U+1F99D</td></tr><tr><td>🐱</td><td>Cara de gato</td><td>U+1F431</td></tr><tr><td>🐈</td><td>Gato</td><td>U+1F408</td></tr><tr><td>🐈‍⬛</td><td>Gato preto</td><td>U+200D</td></tr><tr><td>🦁</td><td>Cara de leão</td><td>U+1F981</td></tr><tr><td>🐯</td><td>Cara de tigre</td><td>U+1F42F</td></tr><tr><td>🐅</td><td>Tigre</td><td>U+1F405</td></tr><tr><td>🐆</td><td>Leopardo</td><td>U+1F406</td></tr><tr><td>🐴</td><td>Cara de cavalo</td><td>U+1F434</td></tr><tr><td>🐎</td><td>Cavalo</td><td>U+1F40E</td></tr><tr><td>🦄</td><td>Cara de unicórnio</td><td>U+1F984</td></tr><tr><td>🦓</td><td>Zebra</td><td>U+1F993</td></tr><tr><td>🦌</td><td>Cervo</td><td>U+1F98C</td></tr><tr><td>🦬</td><td>Búfalo</td><td>U+1F9AC</td></tr><tr><td>🐮</td><td>Cara de vaca</td><td>U+1F42E</td></tr><tr><td>🐄</td><td>Vaca</td><td>U+1F404</td></tr><tr><td>🐂</td><td>Boi</td><td>U+1F402</td></tr><tr><td>🐃</td><td>Búfalo d'água</td><td>U+1F437</td></tr><tr><td>🐷</td><td>Cara de porco</td><td>U+1F437</td></tr><tr><td>🐖</td><td>Porco</td><td>U+1F416</td></tr><tr><td>🐗</td><td>Javali</td><td>U+1F417</td></tr><tr><td>🐽</td><td>Nariz de porco</td><td>U+1F43D</td></tr><tr><td>🐏</td><td>Carneiro</td><td>U+1F40F</td></tr><tr><td>🐑</td><td>Ovelha</td><td>U+1F411</td></tr><tr><td>🐐</td><td>Cabra</td><td>U+1F410</td></tr><tr><td>🐪</td><td>Dromedário</td><td>U+1F42A</td></tr><tr><td>🐫</td><td>Camelo</td><td>U+1F42B</td></tr><tr><td>🦙</td><td>Lhama</td><td>U+1F999</td></tr><tr><td>🦒</td><td>Girafa</td><td>U+1F992</td></tr><tr><td>🐘</td><td>Elefante</td><td>U+1F418</td></tr><tr><td>🦣</td><td>Mamute</td><td>U+1F9A3</td></tr><tr><td>🦏</td><td>Rinoceronte</td><td>U+1F98F</td></tr><tr><td>🦛</td><td>Hipopótamo</td><td>U+1F99B</td></tr><tr><td>🐭</td><td>Cara de rato</td><td>U+1F42D</td></tr><tr><td>🐁</td><td>Rato</td><td>U+1F401</td></tr><tr><td>🐀</td><td>Rato</td><td>U+1F400</td></tr><tr><td>🐹</td><td>Hamster</td><td>U+1F439</td></tr><tr><td>🐰</td><td>Cara de coelho</td><td>U+1F430</td></tr><tr><td>🐇</td><td>Coelho</td><td>U+1F407</td></tr><tr><td>🐿</td><td>Esquilo</td><td>U+1F43F</td></tr><tr><td>🦫</td><td>Castor</td><td>U+1F9AB</td></tr><tr><td>🦔</td><td>Ouriço</td><td>U+1F994</td></tr><tr><td>🦇</td><td>Morcego</td><td>U+1F987</td></tr><tr><td>🐻</td><td>Cara de urso</td><td>U+1F43B</td></tr><tr><td>🐻‍❄️</td><td>Cara de urso polar</td><td>U+200D</td></tr><tr><td>🐨</td><td>Cara de coala</td><td>U+1F428</td></tr><tr><td>🐼</td><td>Cara de panda</td><td>U+1F43C</td></tr><tr><td>🦥</td><td>Bicho-preguiça</td><td>U+1F9A5</td></tr><tr><td>🦦</td><td>Lontra</td><td>U+1F9A6</td></tr><tr><td>🦨</td><td>Gambá</td><td>U+1F9A8</td></tr><tr><td>🦘</td><td>Canguru</td><td>U+1F998</td></tr><tr><td>🦡</td><td>Texugo</td><td>U+1F9A1</td></tr><tr><td>🐾</td><td>Pegadas</td><td>U+1F43E</td></tr><tr><td>🦃</td><td>Peru</td><td>U+1F983</td></tr><tr><td>🐔</td><td>Frango</td><td>U+1F414</td></tr><tr><td>🐓</td><td>Galo</td><td>U+1F413</td></tr><tr><td>🐣</td><td>Incubação</td><td>U+1F423</td></tr><tr><td>🐤</td><td>Pintinho</td><td>U+1F424</td></tr><tr><td>🐥</td><td>Pintinho de frente</td><td>U+1F425</td></tr><tr><td>🐦</td><td>Pássaro</td><td>U+1F426</td></tr><tr><td>🐧</td><td>Pinguim</td><td>U+1F427</td></tr><tr><td>🕊</td><td>Pomba</td><td>U+1F54A</td></tr><tr><td>🦅</td><td>Águia</td><td>U+1F985</td></tr><tr><td>🦆</td><td>Pato</td><td>U+1F986</td></tr><tr><td>🦢</td><td>Cisne</td><td>U+1F9A2</td></tr><tr><td>🦉</td><td>Coruja</td><td>U+1F989</td></tr><tr><td>🦤</td><td>Dodô</td><td>U+1F9A4</td></tr><tr><td>🪶</td><td>Pena</td><td>U+1FAB6</td></tr><tr><td>🦩</td><td>Flamingo</td><td>U+1F9A9</td></tr><tr><td>🦜</td><td>Pavão</td><td>U+1F99C</td></tr><tr><td>🐸</td><td>Cara de rã</td><td>U+1F438</td></tr><tr><td>🐊</td><td>Crocodilo</td><td>U+1F40A</td></tr><tr><td>🐢</td><td>Tartaruga</td><td>U+1F422</td></tr><tr><td>🦎</td><td>Lagarto</td><td>U+1F98E</td></tr><tr><td>🐍</td><td>Cobra</td><td>U+1F40D</td></tr><tr><td>🐲</td><td>Cara de dragão</td><td>U+1F432</td></tr><tr><td>🐉</td><td>Dragão</td><td>U+1F409</td></tr><tr><td>🦕</td><td>Saurópode</td><td>U+1F995</td></tr><tr><td>🦖</td><td>Tiranossauro</td><td>U+1F996</td></tr><tr><td>🐳</td><td>Baleia jorrando</td><td>U+1F433</td></tr><tr><td>🐋</td><td>Baleia</td><td>U+1F40B</td></tr><tr><td>🐬</td><td>Golfinho</td><td>U+1F42C</td></tr><tr><td>🦭</td><td>Foca</td><td>U+1F9AD</td></tr><tr><td>🐟</td><td>Peixe</td><td>U+1F41F</td></tr><tr><td>🐠</td><td>Peixe tropical</td><td>U+1F420</td></tr><tr><td>🐡</td><td>Baiacu</td><td>U+1F421</td></tr><tr><td>🦈</td><td>Tubarão</td><td>U+1F988</td></tr><tr><td>🐙</td><td>Polvo</td><td>U+1F419</td></tr><tr><td>🐚</td><td>Concha espiral</td><td>U+1F41A</td></tr><tr><td>🐌</td><td>Lesma</td><td>U+1F40C</td></tr><tr><td>🦋</td><td>Borboleta</td><td>U+1F98B</td></tr><tr><td>🐛</td><td>Lagarta</td><td>U+1F41B</td></tr><tr><td>🐜</td><td>Formiga</td><td>U+1F41C</td></tr><tr><td>🐝</td><td>Abelha</td><td>U+1F41D</td></tr><tr><td>🪲</td><td>Besouro</td><td>U+1FAB2</td></tr><tr><td>🐞</td><td>Besouro</td><td>U+1F41E</td></tr><tr><td>🦗</td><td>Grilo</td><td>U+1F997</td></tr><tr><td>🪳</td><td>Barata</td><td>U+1FAB3</td></tr><tr><td>🕷</td><td>Aranha</td><td>U+1F577</td></tr><tr><td>🕸</td><td>Teia de aranha</td><td>U+1F578</td></tr><tr><td>🦂</td><td>Escorpião</td><td>U+1F982</td></tr><tr><td>🦟</td><td>Mosquito</td><td>U+1F99F</td></tr><tr><td>🪰</td><td>Mosca</td><td>U+1FAB0</td></tr><tr><td>🪱</td><td>Minhoca</td><td>U+1FAB1</td></tr><tr><td>🦠</td><td>Micróbio</td><td>U+1F9A0</td></tr><tr><td>💐</td><td>Ramalhete</td><td>U+1F490</td></tr><tr><td>🌸</td><td>Flor de cerejeira</td><td>U+1F338</td></tr><tr><td>💮</td><td>Flor branca</td><td>U+1F4AE</td></tr><tr><td>🏵</td><td>Roseta</td><td>U+1F3F5</td></tr><tr><td>🌹</td><td>Rosa</td><td>U+1F339</td></tr><tr><td>🥀</td><td>Flor murcha</td><td>U+1F940</td></tr><tr><td>🌺</td><td>Hibisco</td><td>U+1F33A</td></tr><tr><td>🌻</td><td>Girassol</td><td>U+1F33B</td></tr><tr><td>🌼</td><td>Florescer</td><td>U+1F33C</td></tr><tr><td>🌷</td><td>Tulipa</td><td>U+1F337</td></tr><tr><td>🌱</td><td>Plantinha</td><td>U+1F331</td></tr><tr><td>🪴</td><td>Vaso de planta</td><td>U+1FAB4</td></tr><tr><td>🌲</td><td>Árvore perene</td><td>U+1F332</td></tr><tr><td>🌳</td><td>Árvore de folha caduca</td><td>U+1F333</td></tr><tr><td>🌴</td><td>Palmeira</td><td>U+1F334</td></tr><tr><td>🌵</td><td>Cacto</td><td>U+1F335</td></tr><tr><td>🌾</td><td>Molho de arroz</td><td>U+1F33E</td></tr><tr><td>🌿</td><td>Erva</td><td>U+1F33F</td></tr><tr><td>☘</td><td>Trevo</td><td>U+2618</td></tr><tr><td>🍀</td><td>Trevo-de-quatro-folhas</td><td>U+1F340</td></tr><tr><td>🍁</td><td>Folha de carvalho</td><td>U+1F341</td></tr><tr><td>🍂</td><td>Folha caída</td><td>U+1F342</td></tr><tr><td>🍃</td><td>Folha flutuando ao vento</td><td>U+1F343</td></tr><tr><td>🪴</td><td>Ninho vazio</td><td>U+1FAB9</td></tr><tr><td>🪴</td><td>Ninho com ovos</td><td>U+1FABA</td></tr><tr><td colspan="3"><strong>Emojis de comidas e bebidas</strong></td></tr><tr><td>🍇</td><td>Uvas</td><td>U+1F347</td></tr><tr><td>🍈</td><td>Melão</td><td>U+1F348</td></tr><tr><td>🍉</td><td>Melancia</td><td>U+1F349</td></tr><tr><td>🍊</td><td>Tangerina</td><td>U+1F34A</td></tr><tr><td>🍋</td><td>Limão</td><td>U+1F34B</td></tr><tr><td>🍌</td><td>Banana</td><td>U+1F34C</td></tr><tr><td>🍍</td><td>Abacaxi</td><td>U+1F34D</td></tr><tr><td>🥭</td><td>Manga</td><td>U+1F96D</td></tr><tr><td>🍎</td><td>Maçã vermelha</td><td>U+1F34E</td></tr><tr><td>🍏</td><td>Maçã verde</td><td>U+1F34F</td></tr><tr><td>🍐</td><td>Pera</td><td>U+1F350</td></tr><tr><td>🍑</td><td>Pêssego</td><td>U+1F351</td></tr><tr><td>🍒</td><td>Cerejas</td><td>U+1F352</td></tr><tr><td>🍓</td><td>Morangos</td><td>U+1F353</td></tr><tr><td>🫐</td><td>Amoras</td><td>U+1FAD0</td></tr><tr><td>🥝</td><td>Kiwi</td><td>U+1F95D</td></tr><tr><td>🍅</td><td>Tomate</td><td>U+1F345</td></tr><tr><td>🫒</td><td>Oliva</td><td>U+1FAD2</td></tr><tr><td>🥥</td><td>Coco</td><td>U+1F965</td></tr><tr><td>🥑</td><td>Abacate</td><td>U+1F951</td></tr><tr><td>🍆</td><td>Beringela</td><td>U+1F346</td></tr><tr><td>🥔</td><td>Batata</td><td>U+1F954</td></tr><tr><td>🥕</td><td>Cenoura</td><td>U+1F955</td></tr><tr><td>🌽</td><td>Milho</td><td>U+1F33D</td></tr><tr><td>🌶</td><td>Pimenta</td><td>U+1F336</td></tr><tr><td>🫑</td><td>Pimentão</td><td>U+1FAD1</td></tr><tr><td>🥒</td><td>Pepino</td><td>U+1F952</td></tr><tr><td>🥬</td><td>Verduras</td><td>U+1F96C</td></tr><tr><td>🥦</td><td>Brócolis</td><td>U+1F966</td></tr><tr><td>🧄</td><td>Alho</td><td>U+1F9C4</td></tr><tr><td>🧅</td><td>Cebola</td><td>U+1F9C5</td></tr><tr><td>🍄</td><td>Cogumelo</td><td>U+1F344</td></tr><tr><td>🥜</td><td>Amendoim</td><td>U+1F95C</td></tr><tr><td>🫑</td><td>Feijões</td><td>U+1FAD8</td></tr><tr><td>🌰</td><td>Castanha</td><td>U+1F330</td></tr><tr><td>🍞</td><td>Pão</td><td>U+1F35E</td></tr><tr><td>🥐</td><td>Croissant</td><td>U+1F950</td></tr><tr><td>🥖</td><td>Pão baguete</td><td>U+1F956</td></tr><tr><td>🫓</td><td>Pão achatado</td><td>U+1FAD3</td></tr><tr><td>🥨</td><td>Pretzel</td><td>U+1F968</td></tr><tr><td>🥯</td><td>Bagel</td><td>U+1F96F</td></tr><tr><td>🥞</td><td>Panqueca</td><td>U+1F95E</td></tr><tr><td>🧇</td><td>Waffle</td><td>U+1F9C7</td></tr><tr><td>🧀</td><td>Fatia de queijo</td><td>U+1F9C0</td></tr><tr><td>🍖</td><td>Carne com osso</td><td>U+1F356</td></tr><tr><td>🍗</td><td>Perna de aves</td><td>U+1F357</td></tr><tr><td>🥩</td><td>Corte de carne</td><td>U+1F969</td></tr><tr><td>🥓</td><td>Bacon</td><td>U+1F953</td></tr><tr><td>🍔</td><td>Hamburger</td><td>U+1F354</td></tr><tr><td>🍟</td><td>Batatas fritas</td><td>U+1F35F</td></tr><tr><td>🍕</td><td>Pizza</td><td>U+1F355</td></tr><tr><td>🌭</td><td>Cachorro-quente</td><td>U+1F32D</td></tr><tr><td>🥪</td><td>Sanduíche</td><td>U+1F96A</td></tr><tr><td>🌮</td><td>Taco</td><td>U+1F32E</td></tr><tr><td>🌯</td><td>Burrito</td><td>U+1F32F</td></tr><tr><td>🫔</td><td>Tamal</td><td>U+1FAD4</td></tr><tr><td>🥙</td><td>Pão achatado recheado</td><td>U+1F959</td></tr><tr><td>🧆</td><td>Falafel</td><td>U+1F9C6</td></tr><tr><td>🥚</td><td>Ovo</td><td>U+1F95A</td></tr><tr><td>🍳</td><td>Cozinhando</td><td>U+1F373</td></tr><tr><td>🥘</td><td>Panela rasa de comida</td><td>U+1F958</td></tr><tr><td>🍲</td><td>Pote de comida</td><td>U+1F372</td></tr><tr><td>🫕</td><td>Fondue</td><td>U+1FAD5</td></tr><tr><td>🥣</td><td>Tigela com comida</td><td>U+1F963</td></tr><tr><td>🥗</td><td>Salada verde</td><td>U+1F957</td></tr><tr><td>🍿</td><td>Pipoca</td><td>U+1F37F</td></tr><tr><td>🧈</td><td>Manteiga</td><td>U+1F9C8</td></tr><tr><td>🧂</td><td>Sal</td><td>U+1F9C2</td></tr><tr><td>🥫</td><td>Comida enlatada</td><td>U+1F96B</td></tr><tr><td>🍱</td><td>Bento box</td><td>U+1F371</td></tr><tr><td>🍘</td><td>Bolacha de arroz</td><td>U+1F358</td></tr><tr><td>🍙</td><td>Bola de arroz</td><td>U+1F359</td></tr><tr><td>🍚</td><td>Arroz cozido</td><td>U+1F35A</td></tr><tr><td>🍛</td><td>Arroz de caril</td><td>U+1F35B</td></tr><tr><td>🍜</td><td>Tigela fumegante</td><td>U+1F35C</td></tr><tr><td>🍝</td><td>Espaguete</td><td>U+1F35D</td></tr><tr><td>🍠</td><td>Batata doce assada</td><td>U+1F360</td></tr><tr><td>🍢</td><td>Espetinho</td><td>U+1F362</td></tr><tr><td>🍣</td><td>Sushi</td><td>U+1F363</td></tr><tr><td>🍤</td><td>Camarão frito</td><td>U+1F364</td></tr><tr><td>🍥</td><td>Bolo de peixe com design de redemoinho</td><td>U+1F365</td></tr><tr><td>🥮</td><td>Bolo de lua</td><td>U+1F96E</td></tr><tr><td>🍡</td><td>Dango</td><td>U+1F361</td></tr><tr><td>🥟</td><td>Bolinho</td><td>U+1F95F</td></tr><tr><td>🥠</td><td>Biscoito da sorte</td><td>U+1F960</td></tr><tr><td>🥡</td><td>Caixa de comida chinesa</td><td>U+1F961</td></tr><tr><td>🦀</td><td>Caranguejo</td><td>U+1F980</td></tr><tr><td>🦞</td><td>Lagosta</td><td>U+1F99E</td></tr><tr><td>🦐</td><td>Camarão</td><td>U+1F990</td></tr><tr><td>🦑</td><td>Lula</td><td>U+1F991</td></tr><tr><td>🦪</td><td>Ostra</td><td>U+1F9AA</td></tr><tr><td>🍨</td><td>Sorvete</td><td>U+1F368</td></tr><tr><td>🍧</td><td>Sorvete raspado</td><td>U+1F367</td></tr><tr><td>🍦</td><td>Sorvete macio</td><td>U+1F366</td></tr><tr><td>🍩</td><td>Rosquinha</td><td>U+1F369</td></tr><tr><td>🍪</td><td>Cookie</td><td>U+1F36A</td></tr><tr><td>🎂</td><td>Bolo de aniversário</td><td>U+1F382</td></tr><tr><td>🍰</td><td>Pedaço de bolo</td><td>U+1F370</td></tr><tr><td>🧁</td><td>Cupcake</td><td>U+1F9C1</td></tr><tr><td>🥧</td><td>Torta</td><td>U+1F967</td></tr><tr><td>🍫</td><td>Chocolate</td><td>U+1F36B</td></tr><tr><td>🍬</td><td>Doce</td><td>U+1F36C</td></tr><tr><td>🍭</td><td>Pirulito</td><td>U+1F36D</td></tr><tr><td>🍮</td><td>Pudim</td><td>U+1F36E</td></tr><tr><td>🍯</td><td>Pote de mel</td><td>U+1F36F</td></tr><tr><td>🍼</td><td>Mamadeira</td><td>U+1F37C</td></tr><tr><td>🥛</td><td>Copo de leite</td><td>U+1F95B</td></tr><tr><td>☕</td><td>Bebida quente</td><td>U+2615</td></tr><tr><td>🫖</td><td>Bule</td><td>U+1FAD6</td></tr><tr><td>🍵</td><td>Xícara de chá sem alça</td><td>U+1F375</td></tr><tr><td>🍶</td><td>Saquê</td><td>U+1F376</td></tr><tr><td>🍾</td><td>Garrafa de champanhe estourando</td><td>U+1F37E</td></tr><tr><td>🍷</td><td>Copo de vinho</td><td>U+1F377</td></tr><tr><td>🍸</td><td>Copo de coquetel</td><td>U+1F378</td></tr><tr><td>🍹</td><td>Bebida tropical</td><td>U+1F379</td></tr><tr><td>🍺</td><td>Caneca de cerveja</td><td>U+1F37A</td></tr><tr><td>🍻</td><td>Caneca de cerveja tilintando</td><td>U+1F37B</td></tr><tr><td>🥂</td><td>Taças tilintantes</td><td>U+1F942</td></tr><tr><td>🥃</td><td>Copo com licor</td><td>U+1F943</td></tr><tr><td>🥤</td><td>Copo com canudo</td><td>U+1F964</td></tr><tr><td>🧋</td><td>Chá de bolhas</td><td>U+1F9CB</td></tr><tr><td>🧃</td><td>Caixa de bebidas</td><td>U+1F9C3</td></tr><tr><td>🧉</td><td> Bebida de mate</td><td>U+1F9C9</td></tr><tr><td>🧊</td><td>Gelo</td><td>U+1F9CA</td></tr><tr><td>🥢</td><td>Pauzinhos</td><td>U+1F962</td></tr><tr><td>🍽</td><td>Garfo e faca com prato</td><td>U+1F37D</td></tr><tr><td>🍴</td><td>Garfo e faca</td><td>U+1F374</td></tr><tr><td>🥄</td><td>Colher</td><td>U+1F944</td></tr><tr><td>🔪</td><td>Faca de cozinha</td><td>U+1F52A</td></tr><tr><td>🧋</td><td>Jarra</td><td>U+1FAD9</td></tr><tr><td>🏺</td><td>Ânfora</td><td>U+1F3FA</td></tr><tr><td colspan="3"><strong>Emojis de viagens e lugares</strong></td></tr><tr><td>🌍</td><td>Globo mostrando África e Europa</td><td>U+1F30D</td></tr><tr><td>🌎</td><td>Globo mostrando as Américas</td><td>U+1F30E</td></tr><tr><td>🌏</td><td>Globo mostrando Ásia e Austrália</td><td>U+1F30F</td></tr><tr><td>🌐</td><td>Globo com meridianos</td><td>U+1F310</td></tr><tr><td>🗺️</td><td>Mapa mundial</td><td>U+1F5FA</td></tr><tr><td>🧭</td><td>Bússola</td><td>U+1F9ED</td></tr><tr><td>⛰️</td><td>Montanha</td><td>U+26F0</td></tr><tr><td>🏔️</td><td>Montanha de neve</td><td>U+26F0</td></tr><tr><td>🌋</td><td>Montanha vulcânica</td><td>U+1F30B</td></tr><tr><td>🗻</td><td>Monte Fuji</td><td>U+1F5FB</td></tr><tr><td>🏕️</td><td>Acampamento</td><td>U+1F3D5</td></tr><tr><td>🏖️</td><td>Praia com guarda-chuva</td><td>U+1F3D6</td></tr><tr><td>🏜️</td><td>Deserto</td><td>U+1F3DC</td></tr><tr><td>🏝️</td><td>Ilha deserta</td><td>U+1F3DD</td></tr><tr><td>🏞️</td><td>Parque Nacional</td><td>U+1F3DE</td></tr><tr><td>🏟️</td><td>Estádio</td><td>U+1F3DF</td></tr><tr><td>🏛️</td><td>Edifício clássico</td><td>U+1F3DB</td></tr><tr><td>🏗️</td><td>Guindaste</td><td>U+1F3D7</td></tr><tr><td>🧱</td><td>Tijolo</td><td>U+1F9F1</td></tr><tr><td>🪨</td><td>Pedra</td><td>U+1FAA8</td></tr><tr><td>🪵</td><td>Madeira</td><td>U+1FAB5</td></tr><tr><td>🛖</td><td>Cabana</td><td>U+1F6D6</td></tr><tr><td>🏘️</td><td>Casas</td><td>U+1F3D8</td></tr><tr><td>🏚️</td><td>Casa abandonada</td><td>U+1F3DA</td></tr><tr><td>🏠</td><td>Casa</td><td>U+1F3E0</td></tr><tr><td>🏡</td><td>Casa com jardim</td><td>U+1F3E1</td></tr><tr><td>🏢</td><td>Prédio comercial</td><td>U+1F3E2</td></tr><tr><td>🏣</td><td>Correio japonês</td><td>U+1F3E3</td></tr><tr><td>🏤</td><td>Correios</td><td>U+1F3E4</td></tr><tr><td>🏥</td><td>Hospital</td><td>U+1F3E5</td></tr><tr><td>🏦</td><td>Banco</td><td>U+1F3E6</td></tr><tr><td>🏨</td><td>Hotel</td><td>U+1F3E8</td></tr><tr><td>🏩</td><td>Hotel do amor</td><td>U+1F3E9</td></tr><tr><td>🏪</td><td>Loja de conveniência</td><td>U+1F3EA</td></tr><tr><td>🏫</td><td>Escola</td><td>U+1F3EB</td></tr><tr><td>🏬</td><td>Departamento</td><td>U+1F3EC</td></tr><tr><td>🏭</td><td>Fábrica</td><td>U+1F3ED</td></tr><tr><td>🏯</td><td>Castelo japonês</td><td>U+1F3EF</td></tr><tr><td>🏰</td><td>Castelo</td><td>U+1F3F0</td></tr><tr><td>💒</td><td>Casamento</td><td>U+1F492</td></tr><tr><td>🗼</td><td>Torre de Tóquio</td><td>U+1F5FC</td></tr><tr><td>🗽</td><td>Estátua da Liberdade</td><td>U+1F5FD</td></tr><tr><td>⛪</td><td>Igreja</td><td>U+26EA</td></tr><tr><td>🕌</td><td>Mesquita</td><td>U+1F54C</td></tr><tr><td>🛕</td><td>Templo hindu</td><td>U+1F6D5</td></tr><tr><td>🕍</td><td>Sinagoga</td><td>U+1F54D</td></tr><tr><td>⛩</td><td>Santuário Xintoísta</td><td>U+26E9</td></tr><tr><td>🕋</td><td>Caaba</td><td>U+1F54B</td></tr><tr><td>⛲</td><td>Fonte</td><td>U+26F2</td></tr><tr><td>⛺</td><td>Barraca</td><td>U+26FA</td></tr><tr><td>🌁</td><td>Nevoeiro</td><td>U+1F301</td></tr><tr><td>🌃</td><td>Noite com estrelas</td><td>U+1F303</td></tr><tr><td>🏙️</td><td>Paisagem urbana</td><td>U+1F3D9</td></tr><tr><td>🌅</td><td>Nascer do sol</td><td>U+1F305</td></tr><tr><td>🌄</td><td>Nascer do sol sobre as montanhas</td><td>U+1F304</td></tr><tr><td>🌆</td><td>Arquitetura da cidade ao entardecer</td><td>U+1F306</td></tr><tr><td>🌇</td><td>Pôr do sol</td><td>U+1F307</td></tr><tr><td>🌉</td><td>Ponte à noite</td><td>U+1F309</td></tr><tr><td>♨</td><td>Fontes termais</td><td>U+2668</td></tr><tr><td>🎠</td><td>Cavalo de carrossel</td><td>U+1F3A0</td></tr><tr><td>🎡</td><td>Roda gigante</td><td>U+1F3A1</td></tr><tr><td>🎢</td><td>Montanha russa</td><td>U+1F3A2</td></tr><tr><td>💈</td><td>Poste de barbeiro</td><td>U+1F488</td></tr><tr><td>🎪</td><td>Tenda de circo</td><td>U+1F3AA</td></tr><tr><td colspan="3"><strong>Emojis de transporte</strong></td></tr><tr><td>🚂</td><td>Locomotiva</td><td>U+1F682</td></tr><tr><td>🚃</td><td>Vagão de trem</td><td>U+1F683</td></tr><tr><td>🚄</td><td>Trem de alta velocidade</td><td>U+1F684</td></tr><tr><td>🚅</td><td>Trem-bala</td><td>U+1F685</td></tr><tr><td>🚆</td><td>Trem</td><td>U+1F686</td></tr><tr><td>🚇</td><td>Metrô</td><td>U+1F687</td></tr><tr><td>🚈</td><td>Veiculo leve sobre trilhos</td><td>U+1F688</td></tr><tr><td>🚉</td><td>Estação</td><td>U+1F689</td></tr><tr><td>🚊</td><td>Eléctrico</td><td>U+1F68A</td></tr><tr><td>🚝</td><td>Monotrilho</td><td>U+1F69D</td></tr><tr><td>🚞</td><td>Ferrovia de montanha</td><td>U+1F69E</td></tr><tr><td>🚋</td><td>Bonde</td><td>U+1F68B</td></tr><tr><td>🚌</td><td>Ônibus</td><td>U+1F68C</td></tr><tr><td>🚍</td><td>Ônibus próximo</td><td>U+1F68D</td></tr><tr><td>🚎</td><td>Ônibus elétrico</td><td>U+1F68E</td></tr><tr><td>🚐</td><td>Mini Ônibus</td><td>U+1F690</td></tr><tr><td>🚑</td><td>Ambulância</td><td>U+1F691</td></tr><tr><td>🚒</td><td>Carro de bombeiros</td><td>U+1F692</td></tr><tr><td>🚓</td><td>Carro de polícia</td><td>U+1F693</td></tr><tr><td>🚔</td><td>Carro de polícia próximo</td><td>U+1F694</td></tr><tr><td>🚕</td><td>Táxi</td><td>U+1F695</td></tr><tr><td>🚖</td><td>Táxi próximo</td><td>U+1F696</td></tr><tr><td>🚗</td><td>Automóvel</td><td>U+1F697</td></tr><tr><td>🚘</td><td>Automóvel próximo</td><td>U+1F698</td></tr><tr><td>🚙</td><td>Veículo utilitário esportivo</td><td>U+1F699</td></tr><tr><td>🛻</td><td>Caminhonete</td><td>U+1F6FB</td></tr><tr><td>🚚</td><td>Caminhão de entrega</td><td>U+1F69A</td></tr><tr><td>🚛</td><td>Caminhão articulado</td><td>U+1F69B</td></tr><tr><td>🚜</td><td>Trator</td><td>U+1F69C</td></tr><tr><td>🏎</td><td>Carro de corrida</td><td>U+1F3CE</td></tr><tr><td>🏍</td><td>Motocicleta</td><td>U+1F3CD</td></tr><tr><td>🛵</td><td>Lambreta</td><td>U+1F6F5</td></tr><tr><td>🦽</td><td>Cadeira de rodas manual</td><td>U+1F9BD</td></tr><tr><td>🦼</td><td>Cadeira de rodas motorizada</td><td>U+1F9BC</td></tr><tr><td colspan="3"><strong>Emojis de tempo</strong></td></tr><tr><td>⌛</td><td>Ampulheta</td><td>U+231B</td></tr><tr><td>⏳</td><td>Ampulheta começando</td><td>U+23F3</td></tr><tr><td>⌚</td><td>Relógio de pulso</td><td>U+231A</td></tr><tr><td>⏰</td><td>Alarme</td><td>U+23F0</td></tr><tr><td>⏱</td><td>Cronômetro</td><td>U+23F1</td></tr><tr><td>⏲</td><td>Relógio temporizador</td><td>U+23F2</td></tr><tr><td>🕰</td><td>Relógio de lareira</td><td>U+1F570</td></tr><tr><td>🕛</td><td>Doze horas</td><td>U+1F55B</td></tr><tr><td>🕧</td><td>Doze e trinta</td><td>U+1F567</td></tr><tr><td>🕐</td><td>Uma hora</td><td>U+1F550</td></tr><tr><td>🕜</td><td>Uma e meia</td><td>U+1F55C</td></tr><tr><td>🕑</td><td>Duas horas</td><td>U+1F551</td></tr><tr><td>🕝</td><td>Duas e meia</td><td>U+1F55D</td></tr><tr><td>🕒</td><td>Três horas</td><td>U+1F552</td></tr><tr><td>🕞</td><td>Três e meia</td><td>U+1F55E</td></tr><tr><td>🕓</td><td>Quatro horas</td><td>U+1F553</td></tr><tr><td>🕟</td><td>Quatro e meia</td><td>U+1F55F</td></tr><tr><td>🕔</td><td>Cinco horas</td><td>U+1F554</td></tr><tr><td>🕠</td><td>Cinco e meia</td><td>U+1F560</td></tr><tr><td>🕕</td><td>Seis horas</td><td>U+1F555</td></tr><tr><td>🕡</td><td>Seis e meia</td><td>U+1F561</td></tr><tr><td>🕖</td><td>Sete horas</td><td>U+1F556</td></tr><tr><td>🕢</td><td>Sete e meia</td><td>U+1F562</td></tr><tr><td>🕗</td><td>Oito horas</td><td>U+1F557</td></tr><tr><td>🕣</td><td>Oito e meia</td><td>U+1F563</td></tr><tr><td>🕘</td><td>Nove horas</td><td>U+1F558</td></tr><tr><td>🕤</td><td>Nove e meia</td><td>U+1F564</td></tr><tr><td>🕙</td><td>Dez horas</td><td>U+1F559</td></tr><tr><td>🕥</td><td>Dez e meia</td><td>U+1F565</td></tr><tr><td>🕚</td><td>Onze horas</td><td>U+1F55A</td></tr><tr><td>🕦</td><td>Onze e meia</td><td>U+1F566</td></tr><tr><td colspan="3"><strong>Emojis do céu e do tempo</strong></td></tr><tr><td>🌑</td><td>Lua nova</td><td>U+1F311</td></tr><tr><td>🌒</td><td>Lua crescente</td><td>U+1F312</td></tr><tr><td>🌓</td><td>Lua minguante</td><td>U+1F313</td></tr><tr><td>🌔</td><td>Lua minguante crescente</td><td>U+1F314</td></tr><tr><td>🌕</td><td>Lua cheia</td><td>U+1F315</td></tr><tr><td>🌖</td><td>Lua minguante</td><td>U+1F316</td></tr><tr><td>🌗</td><td>Lua minguante</td><td>U+1F317</td></tr><tr><td>🌘</td><td>Lua minguante</td><td>U+1F318</td></tr><tr><td>🌙</td><td>Lua crescente</td><td>U+1F319</td></tr><tr><td>🌚</td><td>Lua nova com rosto</td><td>U+1F31A</td></tr><tr><td>🌛</td><td>Face da lua do primeiro quarto</td><td>U+1F31B</td></tr><tr><td>🌜</td><td>Rosto do último quarto de lua</td><td>U+1F31C</td></tr><tr><td>🌡</td><td>Termômetro</td><td>U+1F321</td></tr><tr><td>☀️</td><td>Sol</td><td>U+2600</td></tr><tr><td>🌝</td><td>Lua cheia com rosto</td><td>U+1F31D</td></tr><tr><td>🌞</td><td>Sol com rosto</td><td>U+1F31E</td></tr><tr><td>🪐</td><td>Planeta com anéis</td><td>U+1FA90</td></tr><tr><td>⭐</td><td>Estrela</td><td>U+2B50</td></tr><tr><td>🌟</td><td>Estrela brilhante</td><td>U+1F31F</td></tr><tr><td>🌠</td><td>Estrela cadente</td><td>U+1F320</td></tr><tr><td>🌌</td><td>Via Láctea</td><td>U+1F30C</td></tr><tr><td>☁️</td><td>Nuvem</td><td>U+2601</td></tr><tr><td>⛅</td><td>Sol atrás da nuvem</td><td>U+26C5</td></tr><tr><td>⛈️</td><td>Nuvem com iluminação e chuva</td><td>U+26C8</td></tr><tr><td>🌤️</td><td>Sol atrás de uma pequena nuvem</td><td>U+1F324</td></tr><tr><td>🌥️</td><td>Sol atrás de grande nuvem</td><td>U+1F325</td></tr><tr><td>🌦️</td><td>Sol atrás da nuvem de chuva</td><td>U+1F326</td></tr><tr><td>🌧️</td><td>Nuvem com chuva</td><td>U+1F327</td></tr><tr><td>🌨️</td><td>nuvem com neve</td><td>U+1F328</td></tr><tr><td>🌩️</td><td>Nuvem com iluminação</td><td>U+1005</td></tr><tr><td>🌪️</td><td>Tornado</td><td>U+1F32A</td></tr><tr><td>🌫️</td><td>Névoa</td><td>U+1F32B</td></tr><tr><td>🌬️</td><td>Rosto do vento</td><td>U+1F32C</td></tr><tr><td>🌀</td><td>Ciclone</td><td>U+1F300</td></tr><tr><td>🌈</td><td>Arco-íris</td><td>U+1F308</td></tr><tr><td>🌂</td><td>Guarda-chuva fechado</td><td>U+1F302</td></tr><tr><td>☂️</td><td>Guarda-chuva</td><td>U+2602</td></tr><tr><td>☔</td><td>Guarda-chuva com pingos de chuva</td><td>U+2614</td></tr><tr><td>⛱️</td><td>Guarda-chuva no chão</td><td>U+26F1</td></tr><tr><td>⚡</td><td>Alta voltagem</td><td>U+26A1</td></tr><tr><td>❄️</td><td>Floco de neve</td><td>U+2744</td></tr><tr><td>☃️</td><td>Boneco de neve</td><td>U+2603</td></tr><tr><td>⛄</td><td>Boneco de neve sem neve</td><td>U+26C4</td></tr><tr><td>☄️</td><td>Cometa</td><td>U+2604</td></tr><tr><td>🔥</td><td>Incêndio</td><td>U+1F525</td></tr><tr><td>💧</td><td>Gotícula</td><td>U+1F4A7</td></tr><tr><td>🌊</td><td>Onda de água</td><td>U+1F30A</td></tr><tr><td colspan="3"><strong>Emojis de atividade</strong></td></tr><tr><td>🎃</td><td>Abóbora de Halloween</td><td>U+1F383</td></tr><tr><td>🎄</td><td>Árvore de Natal</td><td>U+1F384</td></tr><tr><td>🎆</td><td>Fogos de artifício</td><td>U+1F386</td></tr><tr><td>🎇</td><td>Sparkler de fogos de artifício</td><td>U+1F387</td></tr><tr><td>🧨</td><td>Dinamite</td><td>U+1F9E8</td></tr><tr><td>✨</td><td>Brilhos</td><td>U+2728</td></tr><tr><td>🎈</td><td>Balão</td><td>U+1F388</td></tr><tr><td>🎉</td><td>Popper de festa</td><td>U+1F389</td></tr><tr><td>🎊</td><td>Bola de confete</td><td>U+1F38A</td></tr><tr><td>🎋</td><td>Árvore Tanabata</td><td>U+1F38B</td></tr><tr><td>🎍</td><td>Decoração de Ano Novo</td><td>U+1F38D</td></tr><tr><td>🎎</td><td>Bonecas Japonesas</td><td>U+1F38E</td></tr><tr><td>🎏</td><td>Meias de vento</td><td>U+1F38F</td></tr><tr><td>🎑</td><td>Cerimônia de observação da lua</td><td>U+1F391</td></tr><tr><td>🧧</td><td>Envelope vermelho</td><td>U+1F9E7</td></tr><tr><td>🎀</td><td>Fita</td><td>U+1F380</td></tr><tr><td>🎁</td><td>Presente embrulhado</td><td>U+1F381</td></tr><tr><td>🎗️</td><td>Faixa de lembrete</td><td>U+1F397</td></tr><tr><td>🎟️</td><td>Bilhete de entrada</td><td>U+1F39F</td></tr><tr><td>🎫</td><td>Bilhete</td><td>U+1F3AB</td></tr><tr><td colspan="3"><strong>Medalhas de Prêmio Emojis</strong></td></tr><tr><td>🎖️</td><td>Medalha militar</td><td>U+1F396</td></tr><tr><td>🏆</td><td>Troféu</td><td>U+1F3C6</td></tr><tr><td>🏅</td><td>Medalha esportiva</td><td>U+1F3C5</td></tr><tr><td>🥇</td><td>Medalha de ouro - primeira posição</td><td>U+1F947</td></tr><tr><td>🥈</td><td>Medalha de prata - segunda posição</td><td>U+1F948</td></tr><tr><td>🥉</td><td>Medalha de bronze - terceira posição</td><td>U+1F949</td></tr><tr><td colspan="3"><strong>Emojis de esportes</strong></td></tr><tr><td>⚽</td><td>Bola de futebol</td><td>U+26BD</td></tr><tr><td>⚾</td><td>Beisebol</td><td>U+26BE</td></tr><tr><td>🥎</td><td>Softbol</td><td>U+1F94E</td></tr><tr><td>🏀</td><td>Basquetebol</td><td>U+1F3C0</td></tr><tr><td>🏐</td><td>Vôlei</td><td>U+1F3D0</td></tr><tr><td>🏈</td><td>Futebol americano</td><td>U+1F3C8</td></tr><tr><td>🏉</td><td>Rugby</td><td>U+1F3C9</td></tr><tr><td>🎾</td><td>Tênis</td><td>U+1F3BE</td></tr><tr><td>🥏</td><td>Disco voador</td><td>U+1F94F</td></tr><tr><td>🎳</td><td>Boliche</td><td>U+1F3B3</td></tr><tr><td>🏏</td><td>Jogo de críquete</td><td>U+1F3CF</td></tr><tr><td>🏑</td><td>Hóquei de campo</td><td>U+1F3D1</td></tr><tr><td>🏒</td><td>Hockey no gelo</td><td>U+1F3D2</td></tr><tr><td>🥍</td><td>Lacrosse</td><td>U+1F94D</td></tr><tr><td>🏓</td><td>Pingue-pongue</td><td>U+1F3D3</td></tr><tr><td>🏸</td><td>Raquete de Badminton e peteca</td><td>U+1F3F8</td></tr><tr><td>🥊</td><td>Luva de boxe</td><td>U+1F94A</td></tr><tr><td>🥋</td><td>Uniforme de artes marciais</td><td>U+1F94B</td></tr><tr><td>🥅</td><td>Rede do Gol</td><td>U+1F945</td></tr><tr><td>⛳</td><td>Bandeira em um buraco</td><td>U+26F3</td></tr><tr><td>⛸</td><td>Patins de gelo</td><td>U+26F8</td></tr><tr><td>🎣</td><td>Vara de pesca</td><td>U+1F3A3</td></tr><tr><td>🤿</td><td>Máscara de mergulho</td><td>U+1F93F</td></tr><tr><td>🎽</td><td>Camisa de corrida</td><td>U+1F3BD</td></tr><tr><td>🎿</td><td>Esquis</td><td>U+1F3BF</td></tr><tr><td>🛷</td><td>Trenó</td><td>U+1F6F7</td></tr><tr><td>🥌</td><td>Pedra de Curling</td><td>U+1F94C</td></tr><tr><td colspan="3"><strong>Emojis de jogos</strong></td></tr><tr><td>🎯</td><td>Alvo</td><td>U+1F3AF</td></tr><tr><td>🪀</td><td>Ioiô</td><td>U+1FA80</td></tr><tr><td>🪁</td><td>Pipa</td><td>U+1FA81</td></tr><tr><td>🎱</td><td>Bola 8</td><td>U+1F3B1</td></tr><tr><td>🔮</td><td>Bola de cristal</td><td>U+1F52E</td></tr><tr><td>🪄</td><td>Varinha mágica</td><td>U+1FA84</td></tr><tr><td>🧿</td><td>Amuleto de Nazar</td><td>U+1F9FF</td></tr><tr><td>🪄</td><td>Hamsa</td><td>U+1FAAC</td></tr><tr><td>🎮</td><td>Controle de videogame</td><td>U+1F3AE</td></tr><tr><td>🕹</td><td>Manche de videogame</td><td>U+1F579</td></tr><tr><td>🎰</td><td>Máquina caça-níqueis</td><td>U+1F3B0</td></tr><tr><td>🎲</td><td>Dado do jogo</td><td>U+1F3B2</td></tr><tr><td>🧩</td><td>Peça de Puzzle</td><td>U+1F9E9</td></tr><tr><td>🧸</td><td>Urso Teddy</td><td>U+1F9F8</td></tr><tr><td>🪅</td><td>Piñata</td><td>U+1FA85</td></tr><tr><td>🪞</td><td>Espelho</td><td>U+1FAA9</td></tr><tr><td>🪆</td><td>Boneca aninhada</td><td>U+1FA86</td></tr><tr><td>♠</td><td>Naipe de espadas</td><td>U+2660</td></tr><tr><td>♥</td><td>Naipe de copas</td><td>U+2665</td></tr><tr><td>♣</td><td>Naipe de paus</td><td>U+2663</td></tr><tr><td>♟️</td><td>Peão de xadrez</td><td>U+265F</td></tr><tr><td>🃏</td><td>Curinga</td><td>U+1F0CF</td></tr><tr><td>🀄</td><td>Dragão vermelho Mahjong</td><td>U+1F004</td></tr><tr><td>🎴</td><td>Cartas de baralho de flores</td><td>U+1F3B4</td></tr><tr><td colspan="3"><strong>Emojis de artes e ofícios</strong></td></tr><tr><td>🎭</td><td>Artes performáticas</td><td>U+1F3AD</td></tr><tr><td>🖼️</td><td>Foto emoldurada</td><td>U+1F5BC</td></tr><tr><td>🎨</td><td>Paleta de artista</td><td>U+1F3A8</td></tr><tr><td>🧵</td><td>Carretel de linha</td><td>U+1F9F5</td></tr><tr><td>🪡</td><td>Agulha de costura com linha</td><td>U+1FAA1</td></tr><tr><td>🧶</td><td>Novelo</td><td>U+1F9F6</td></tr><tr><td>🪢</td><td>Nó</td><td>U+1FAA2</td></tr><tr><td colspan="3"><strong>Emojis de objetos de vestuário</strong></td></tr><tr><td>👓</td><td>Óculos</td><td>U+1F453</td></tr><tr><td>🕶</td><td>Óculos escuros</td><td>U+1F576</td></tr><tr><td>🥽</td><td>Óculos de segurança transparentes</td><td>U+1F97D</td></tr><tr><td>🥼</td><td>Bata de laboratório</td><td>U+1F97C</td></tr><tr><td>🦺</td><td>Colete salva-vidas</td><td>U+1F9BA</td></tr><tr><td>👔</td><td>Gravata</td><td>U+1F454</td></tr><tr><td>👕</td><td>Camiseta</td><td>U+1F455</td></tr><tr><td>👖</td><td>Jeans</td><td>U+1F456</td></tr><tr><td>🧣</td><td>Cachecol</td><td>U+1F9E3</td></tr><tr><td>🧤</td><td>Luvas</td><td>U+1F9E4</td></tr><tr><td>🧥</td><td>Casaco</td><td>U+1F9E5</td></tr><tr><td>🧦</td><td>Meias</td><td>U+1F9E6</td></tr><tr><td>👗</td><td>Vestido</td><td>U+1F457</td></tr><tr><td>👘</td><td>Quimono</td><td>U+1F458</td></tr><tr><td>🥻</td><td>Sari</td><td>U+1F97B</td></tr><tr><td>🩱</td><td> Maiô esportivo de uma peça</td><td>U+1FA71</td></tr><tr><td>🩲</td><td>Cueca</td><td>U+1FA72</td></tr><tr><td>🩳</td><td>Calção</td><td>U+1FA73</td></tr><tr><td>👙</td><td>Bikini</td><td>U+1F459</td></tr><tr><td>👚</td><td>Blusa feminina</td><td>U+1F45A</td></tr><tr><td>👛</td><td>Carteira</td><td>U+1F45B</td></tr><tr><td>👜</td><td>Bolsa</td><td>U+1F45C</td></tr><tr><td>👝</td><td>Necessaire</td><td>U+1F45D</td></tr><tr><td>🛍️</td><td>Sacolas de compras</td><td>U+1F6CD</td></tr><tr><td>🎒</td><td>Mochila</td><td>U+1F392</td></tr><tr><td>🩴</td><td>Sandálias de tira</td><td>U+1FA74</td></tr><tr><td>👞</td><td>Sapato de homem</td><td>U+1F45E</td></tr><tr><td>👟</td><td>Tênis de corrida</td><td>U+1F45F</td></tr><tr><td>🥾</td><td>Bota de caminhada</td><td>U+1F97E</td></tr><tr><td>🥿</td><td>Sapato baixo</td><td>U+1F97F</td></tr><tr><td>👠</td><td>Sapato de salto alto</td><td>U+1F460</td></tr><tr><td>👡</td><td>Sandália de mulher</td><td>U+1F461</td></tr><tr><td>🩰</td><td>Sapatilhas</td><td>U+1FA70</td></tr><tr><td>👢</td><td>Bota de mulher</td><td>U+1F462</td></tr><tr><td>👑</td><td>Coroa</td><td>U+1F451</td></tr><tr><td>👒</td><td>Chapéu de mulher</td><td>U+1F452</td></tr><tr><td>🎩</td><td>Cartola</td><td>U+1F3A9</td></tr><tr><td>🎓</td><td>Chapéu de graduação</td><td>U+1F393</td></tr><tr><td>🧢</td><td>Boné</td><td>U+1F9E2</td></tr><tr><td>🪖</td><td>Capacete militar</td><td>U+1FA96</td></tr><tr><td>⛑️</td><td>Capacete do trabalhador de resgate</td><td>U+26D1</td></tr><tr><td>📿</td><td>Contas de oração</td><td>U+1F4FF</td></tr><tr><td>💄</td><td>Batom</td><td>U+1F484</td></tr><tr><td>💍</td><td>Anel</td><td>U+1F48D</td></tr><tr><td>💎</td><td>Pedra preciosa</td><td>U+1F48E</td></tr><tr><td colspan="3"><strong>Emojis de som</strong></td></tr><tr><td>🔇</td><td>Alto-falante sem som</td><td>U+1F507</td></tr><tr><td>🔈</td><td>Alto-falante de volume baixo</td><td>U+1F508</td></tr><tr><td>🔉</td><td>Alto-falante de volume médio</td><td>U+1F509</td></tr><tr><td>🔊</td><td>Alto-falante de volume alto</td><td>U+1F50A</td></tr><tr><td>📢</td><td>Alto-falante</td><td>U+1F4E2</td></tr><tr><td>📣</td><td>Megafone</td><td>U+1F4E3</td></tr><tr><td>📯</td><td>Trompa</td><td>U+1F4EF</td></tr><tr><td>🔔</td><td>Sino</td><td>U+1F514</td></tr><tr><td>🔕</td><td>Sino com barra</td><td>U+1F515</td></tr><tr><td>🎼</td><td>Pontuação musical</td><td>U+1F3BC</td></tr><tr><td>🎵</td><td>Nota musical</td><td>U+1F3B5</td></tr><tr><td>🎶</td><td>Notas musicais</td><td>U+1F3B6</td></tr><tr><td>🎙️</td><td>Microfone de estúdio</td><td>U+1F399</td></tr><tr><td>🎚️</td><td>Controle deslizante de nível</td><td>U+1F39A</td></tr><tr><td>🎛️</td><td>Botões de controle</td><td>U+1F39B</td></tr><tr><td>🎤</td><td>Microfone</td><td>U+1F3A4</td></tr><tr><td>🎧</td><td>Fone de ouvido</td><td>U+1F3A7</td></tr><tr><td>📻</td><td>Rádio</td><td>U+1F4FB</td></tr><tr><td colspan="3"><strong>Emojis de instrumentos musicais</strong></td></tr><tr><td>🎷</td><td>Saxofone</td><td>U+1F3B7</td></tr><tr><td>🪗</td><td>Acordeão</td><td>U+1FA97</td></tr><tr><td>🎸</td><td>Violão</td><td>U+1F3B8</td></tr><tr><td>🎹</td><td>Teclado musical</td><td>U+1F3B9</td></tr><tr><td>🎺</td><td>Trompete</td><td>U+1F3BA</td></tr><tr><td>🎻</td><td>Violino</td><td>U+1F3BB</td></tr><tr><td>🪕</td><td>Banjo</td><td>U+1FA95</td></tr><tr><td>🥁</td><td>Tambor</td><td>U+1F941</td></tr><tr><td>🪘</td><td>Tambor longo</td><td>U+1FA98</td></tr><tr><td colspan="3"><strong>Emojis de telefone</strong></td></tr><tr><td>📱</td><td>Celular</td><td>U+1F4F1</td></tr><tr><td>📲</td><td>Celular com seta</td><td>U+1F4F2</td></tr><tr><td>☎️</td><td>Telefone</td><td>U+260E</td></tr><tr><td>📞</td><td>Receptor de telefone</td><td>U+1F4DE</td></tr><tr><td>📟</td><td>Pager</td><td>U+1F4DF</td></tr><tr><td>📠</td><td>Maquina de fax</td><td>U+1F4E0</td></tr><tr><td colspan="3"><strong>Emojis de computador</strong></td></tr><tr><td>🔋</td><td>Bateria cheia</td><td>U+1F50B</td></tr><tr><td>🪫</td><td>Bateria fraca</td><td>U+1FAAB</td></tr><tr><td>🔌</td><td>Plugue elétrico</td><td>U+1F50C</td></tr><tr><td>💻</td><td>Computador portátil</td><td>U+1F4BB</td></tr><tr><td>🖥️</td><td>Computador de mesa</td><td>U+1F5A5</td></tr><tr><td>🖨️</td><td>Impressora</td><td>U+1F5A8</td></tr><tr><td>⌨️</td><td>Teclado</td><td>U+2328</td></tr><tr><td>🖱️</td><td>Mouse</td><td>U+1F5B1</td></tr><tr><td>🖲️</td><td>Trackball</td><td>U+1F5B2</td></tr><tr><td>💽</td><td>Disco do computador</td><td>U+1F4BD</td></tr><tr><td>💾</td><td>Disquete</td><td>U+1F4BE</td></tr><tr><td>💿</td><td>CD</td><td>U+1F4BF</td></tr><tr><td>📀</td><td>DVD</td><td>U+1F4C0</td></tr><tr><td>🧮</td><td>Ábaco</td><td>U+1F9EE</td></tr><tr><td colspan="3"><strong>Emojis de luz e vídeo</strong></td></tr><tr><td>🎥</td><td>Câmera cinematográfica</td><td>U+1F3A5</td></tr><tr><td>🎞️</td><td>Quadros de filme</td><td>U+1F39E</td></tr><tr><td>📽️</td><td>Projetor de filme</td><td>U+1F4FD</td></tr><tr><td>🎬</td><td>Claquete</td><td>U+1F3AC</td></tr><tr><td>📺</td><td>Televisão</td><td>U+1F4FA</td></tr><tr><td>📷</td><td>Câmera</td><td>U+1F4F7</td></tr><tr><td>📸</td><td>Câmera com flash</td><td>U+1F4F8</td></tr><tr><td>📹</td><td>Câmera de vídeo</td><td>U+1F4F9</td></tr><tr><td>📼</td><td>Cassete de vídeo</td><td>U+1F4FC</td></tr><tr><td>🔍</td><td>Lupa inclinada para a esquerda</td><td>U+1F50D</td></tr><tr><td>🔎</td><td>Lupa inclinada para a direita</td><td>U+1F50E</td></tr><tr><td>🕯️</td><td>Vela</td><td>U+1F56F</td></tr><tr><td>💡</td><td>Lâmpada elétrica</td><td>U+1F4A1</td></tr><tr><td>🔦</td><td>Lanterna</td><td>U+1F526</td></tr><tr><td>🏮</td><td>Lanterna de izakaya</td><td>U+1F3EE</td></tr><tr><td>🪔</td><td>Lâmpada Diya</td><td>U+1FA94</td></tr><tr><td colspan="3"><strong>Emojis de livro e papel</strong></td></tr><tr><td>📔</td><td>Caderno com capa decorativa</td><td>U+1F4D4</td></tr><tr><td>📕</td><td>Caderno fechado</td><td>U+1F4D5</td></tr><tr><td>📖</td><td>Caderno aberto</td><td>U+1F4D6</td></tr><tr><td>📗</td><td>Livro verde</td><td>U+1F4D7</td></tr><tr><td>📘</td><td>Livro azul</td><td>U+1F4D8</td></tr><tr><td>📙</td><td>Livro laranja</td><td>U+1F4D9</td></tr><tr><td>📚</td><td>Livros coloridos</td><td>U+1F4DA</td></tr><tr><td>📓</td><td>Caderno</td><td>U+1F4D3</td></tr><tr><td>📒</td><td>Livro encadernado em espiral</td><td>U+1F4D2</td></tr><tr><td>📃</td><td>Página com ondulação</td><td>U+1F4C3</td></tr><tr><td>📜</td><td>Pergaminho</td><td>U+1F4DC</td></tr><tr><td>📄</td><td>Página voltada para cima</td><td>U+1F4C4</td></tr><tr><td>📰</td><td>Jornal</td><td>U+1F4F0</td></tr><tr><td>🗞</td><td>Jornal enrolado</td><td>U+1F5DE</td></tr><tr><td>📑</td><td>Guias de favoritos</td><td>U+1F4D1</td></tr><tr><td>🔖</td><td>Marca-páginas</td><td>U+1F516</td></tr><tr><td>🏷</td><td>Etiqueta</td><td>U+1F3F7</td></tr><tr><td>💰</td><td>Saco de dinheiro</td><td>U+1F4B0</td></tr><tr><td>🪙</td><td>Moeda</td><td>U+1FA99</td></tr><tr><td>💴</td><td>Nota de iene</td><td>U+1F4B4</td></tr><tr><td>💵</td><td>Nota de dólar</td><td>U+1F4B5</td></tr><tr><td>💶</td><td>Nota de euro</td><td>U+1F4B6</td></tr><tr><td>💷</td><td>Nota de libra</td><td>U+1F4B7</td></tr><tr><td>💸</td><td>Dinheiro com asas</td><td>U+1F4B8</td></tr><tr><td>💳</td><td>Cartão de crédito</td><td>U+1F4B3</td></tr><tr><td>🧾</td><td>Recibo</td><td>U+1F9FE</td></tr><tr><td>💹</td><td>Aumento no gráfico em ienes</td><td>U+1F4B9</td></tr><tr><td colspan="3"><strong>Enviar emojis</strong></td></tr><tr><td>✉️</td><td>Envelope</td><td>U+2709</td></tr><tr><td>📧</td><td>Email</td><td>U+1F4E7</td></tr><tr><td>📩</td><td>Envelope com seta</td><td>U+1F4E9</td></tr><tr><td>📤</td><td>Caixa de saída</td><td>U+1F4E4</td></tr><tr><td>📥</td><td>Caixa de entrada</td><td>U+1F4E5</td></tr><tr><td>📦</td><td>Pacote</td><td>U+1F4E6</td></tr><tr><td>📫</td><td>Caixa de correio fechada com Bandeira levantada</td><td>U+1F4EB</td></tr><tr><td>📪</td><td>Caixa de correio fechada com Bandeira abaixada</td><td>U+1F4EA</td></tr><tr><td>📬</td><td>Caixa de correio aberta com Bandeira levantada</td><td>U+1F4EC</td></tr><tr><td>📭</td><td>Caixa de correio aberta com Bandeira abaixada</td><td>U+1F4ED</td></tr><tr><td>📮</td><td>Caixa postal</td><td>U+1F4EE</td></tr><tr><td>🗳️</td><td>Urna de voto com cédula</td><td>U+1F5F3</td></tr><tr><td colspan="3"><strong>Escrita</strong></td></tr><tr><td>✏️</td><td>Lápis</td><td>U+270F</td></tr><tr><td>✒️</td><td>Ponta preta</td><td>U+2712</td></tr><tr><td>🖋️</td><td>Caneta tinteiro</td><td>U+1F58B</td></tr><tr><td>🖊️</td><td>Caneta</td><td>U+1F58A</td></tr><tr><td>🖌️</td><td>Pincel</td><td>U+1F58C</td></tr><tr><td>🖍️</td><td>Giz de cera</td><td>U+1F58D</td></tr><tr><td>📝</td><td>Memorando</td><td>U+1F4DD</td></tr><tr><td colspan="3"><strong>Emojis do escritório</strong></td></tr><tr><td>💼</td><td>Pasta</td><td>U+1F4BC</td></tr><tr><td>📁</td><td>Pasta de arquivo</td><td>U+1F4C1</td></tr><tr><td>📂</td><td>Pasta aberta</td><td>U+1F4C2</td></tr><tr><td>🗂️</td><td>Divisores de índice de pastas</td><td>U+1F5C2</td></tr><tr><td>📅</td><td>Calendário</td><td>U+1F4C5</td></tr><tr><td>📆</td><td>Calendário descartável</td><td>U+1F4C6</td></tr><tr><td>📇</td><td>Fichário</td><td>U+1F4C7</td></tr><tr><td>📈</td><td>Gráfico crescente</td><td>U+1F4C8</td></tr><tr><td>📉</td><td>Gráfico decrescente</td><td>U+1F4C9</td></tr><tr><td>📊</td><td>Gráfico de barras</td><td>U+1F4CA</td></tr><tr><td>📋</td><td>Prancheta</td><td>U+1F4CB</td></tr><tr><td>📌</td><td>Alfinete</td><td>U+1F4CC</td></tr><tr><td>📍</td><td>Alfinete redondo</td><td>U+1F4CD</td></tr><tr><td>📎</td><td>Clipe de papel</td><td>U+1F4CE</td></tr><tr><td>🖇</td><td>Clipes de papel vinculados</td><td>U+1F587</td></tr><tr><td>📏</td><td>Régua reta</td><td>U+1F4CF</td></tr><tr><td>📐</td><td>Régua triangular</td><td>U+1F4D0</td></tr><tr><td>✂️</td><td>Tesouras</td><td>U+2702</td></tr><tr><td>🗃️</td><td>Caixa de arquivo de cartão</td><td>U+1F5C3</td></tr><tr><td>🗄️</td><td>Armário de arquivo</td><td>U+1F5C4</td></tr><tr><td>🗑️</td><td>Cesto de lixo</td><td>U+1F5D1</td></tr><tr><td colspan="3"><strong>Bloquear emojis</strong></td></tr><tr><td>🔒</td><td>Bloqueado</td><td>U+1F512</td></tr><tr><td>🔓</td><td>Desbloqueado</td><td>U+1F513</td></tr><tr><td>🔏</td><td>Fechado com caneta</td><td>U+1F50F</td></tr><tr><td>🔐</td><td>Fechado com chave</td><td>U+1F510</td></tr><tr><td>🔑</td><td>Chave</td><td>U+1F511</td></tr><tr><td>🗝️</td><td>Chave velha</td><td>U+1F5DD</td></tr><tr><td colspan="3"><strong>Ferramentas Emojis</strong></td></tr><tr><td>🔨</td><td>Martelo</td><td>U+1F528</td></tr><tr><td>🪓</td><td>Machado</td><td>U+1FA93</td></tr><tr><td>⛏</td><td>Escolha</td><td>U+26CF</td></tr><tr><td>⚒️</td><td>Martelo e picareta</td><td>U+2692</td></tr><tr><td>🛠️</td><td>Martelo e chave</td><td>U+1F6E0</td></tr><tr><td>🗡️</td><td>Espada</td><td>U+1F5E1</td></tr><tr><td>⚔️</td><td>Espadas cruzadas</td><td>U+2694</td></tr><tr><td>🔫</td><td>Arma de água</td><td>U+1F52B</td></tr><tr><td>🪃</td><td>Bumerangue</td><td>U+1FA83</td></tr><tr><td>🏹</td><td>Arco e flecha</td><td>U+1F3F9</td></tr><tr><td>🛡️</td><td>Escudo</td><td>U+1F6E1</td></tr><tr><td>🪚</td><td>Serra de carpintaria</td><td>U+1FA9A</td></tr><tr><td>🔧</td><td>chave inglesa</td><td>U+1F527</td></tr><tr><td>🪛</td><td>Chave de fenda</td><td>U+1FA9B</td></tr><tr><td>🔩</td><td>Parafuso e porca</td><td>U+1F529</td></tr><tr><td>⚙️</td><td>Engrenagem</td><td>U+2699</td></tr><tr><td>🗜️</td><td>Grampo</td><td>U+1F5DC</td></tr><tr><td>⚖️</td><td>Balança</td><td>U+2696</td></tr><tr><td>🦯</td><td>Cano branco</td><td>U+1F9AF</td></tr><tr><td>🔗</td><td>Link</td><td>U+1F517</td></tr><tr><td>⛓</td><td>Correntes</td><td>U+26D3</td></tr><tr><td>🪝</td><td>Gancho</td><td>U+1FA9D</td></tr><tr><td>🧰</td><td>Caixa de ferramentas</td><td>U+1F9F0</td></tr><tr><td>🧲</td><td>Magnético</td><td>U+1F9F2</td></tr><tr><td>🪜</td><td>Escada</td><td>U+1FA9C</td></tr><tr><td colspan="3"><strong>Emojis científicos</strong></td></tr><tr><td>⚗️</td><td>Alambique</td><td>U+2697</td></tr><tr><td>🧪</td><td>Tubo de ensaio</td><td>U+1F9EA</td></tr><tr><td>🧫</td><td>Placa de Petri</td><td>U+1F9EB</td></tr><tr><td>🧬</td><td>DNA</td><td>U+1F9EC</td></tr><tr><td>🔬</td><td>Microscópio</td><td>U+1F52C</td></tr><tr><td>🔭</td><td>Telescópio</td><td>U+1F52D</td></tr><tr><td>📡</td><td>Antena de satélite</td><td>U+1F4E1</td></tr><tr><td colspan="3"><strong>Emojis médicos</strong></td></tr><tr><td>💉</td><td>Seringa</td><td>U+1F489</td></tr><tr><td>🩸</td><td>Uma gota de sangue</td><td>U+1FA78</td></tr><tr><td>💊</td><td>Comprimido</td><td>U+1F48A</td></tr><tr><td>🩹</td><td>Bandagem adesiva</td><td>🩹</td></tr><tr><td>🩼</td><td>Embreagem</td><td>U+1FA7C</td></tr><tr><td>🩺</td><td>Estetoscópio</td><td>U+1FA7A</td></tr><tr><td>🩻</td><td>Raio X</td><td>U+1FA7B</td></tr><tr><td colspan="3"><strong>Emojis domésticos</strong></td></tr><tr><td>🚪</td><td>Porta</td><td>U+1F6AA</td></tr><tr><td>🛗</td><td>Elevador</td><td>U+1F6D7</td></tr><tr><td>🪞</td><td>Espelho</td><td>U+1FA9E</td></tr><tr><td>🪟</td><td>Janela</td><td>U+1FA9F</td></tr><tr><td>🛏️</td><td>Cama</td><td>U+1F6CF</td></tr><tr><td>🛋️</td><td>Sofá e luminária</td><td>U+1F6CB</td></tr><tr><td>🪑</td><td>Cadeira</td><td>U+1FA91</td></tr><tr><td>🚽</td><td>Vaso sanitário</td><td>U+1F6BD</td></tr><tr><td>🪠</td><td>Desentupidor</td><td>U+1FAA0</td></tr><tr><td>🚿</td><td>Ducha</td><td>U+1F6BF</td></tr><tr><td>🛁</td><td>Banheira</td><td>U+1F6C1</td></tr><tr><td>🪤</td><td>Ratoeira</td><td>U+1FAA4</td></tr><tr><td>🪒</td><td>Navalha</td><td>U+1FA92</td></tr><tr><td>🧴</td><td>Frasco de loção</td><td>U+1F9F4</td></tr><tr><td>🧷</td><td>Pino de segurança</td><td>U+1F9F7</td></tr><tr><td>🧹</td><td>Vassoura</td><td>U+1F9F9</td></tr><tr><td>🧺</td><td>Cesta</td><td>U+1F9FA</td></tr><tr><td>🧻</td><td>Rolo de papel</td><td>U+1F9FB</td></tr><tr><td>🪣</td><td>Balde</td><td>U+1FAA3</td></tr><tr><td>🧼</td><td>Sabão</td><td>U+1F9FC</td></tr><tr><td>🫧</td><td>Bolhas</td><td>U+1FAE7</td></tr><tr><td>🪥</td><td>Escova de dente</td><td>U+1FAA5</td></tr><tr><td>🧽</td><td>Esponja</td><td>U+1F9FD</td></tr><tr><td>🧯</td><td>Extintor de incêndio</td><td>U+1F9EF</td></tr><tr><td>🛒</td><td>Carrinho de compras</td><td>U+1F6D2</td></tr><tr><td colspan="3"><strong>Emojis de outros objetos</strong></td></tr><tr><td>🚬</td><td>Cigarro</td><td>U+1F6AC</td></tr><tr><td>⚰️</td><td>Caixão</td><td>U+26B0</td></tr><tr><td>🪦</td><td>Lápide</td><td>U+1FAA6</td></tr><tr><td>⚱️</td><td>Urna funerária</td><td>U+26B1</td></tr><tr><td>🗿</td><td>Moai</td><td>U+1F5FF</td></tr><tr><td>🪧</td><td>Cartaz</td><td>U+1FAA7</td></tr><tr><td>🪪</td><td>Carteira de identidade</td><td>U+1FAAA</td></tr><tr><td colspan="3"><strong>Símbolos</strong></td></tr><tr><td>🏧</td><td>Sinal ATM</td><td>U+1F3E7</td></tr><tr><td>🚮</td><td>Lixo na lixeira</td><td>U+1F6AE</td></tr><tr><td>🚰</td><td>Água potável</td><td>U+1F6B0</td></tr><tr><td>♿</td><td>Cadeira de rodas</td><td>U+267F</td></tr><tr><td>🚹</td><td>Banheiro masculino</td><td>U+1F6B9</td></tr><tr><td>🚺</td><td>Banheiro feminino</td><td>U+1F6BA</td></tr><tr><td>🚻</td><td>Banheiro unisex</td><td>U+1F6BB</td></tr><tr><td>🚼</td><td>Bebê</td><td>U+1F6BC</td></tr><tr><td>🚾</td><td>Banheiro</td><td>U+1F6BE</td></tr><tr><td>🛂</td><td>Controle de passaporte</td><td>U+1F6C2</td></tr><tr><td>🛃</td><td>Alfândega</td><td>U+1F6C3</td></tr><tr><td>🛄</td><td>Bagagem</td><td>U+1F6C4</td></tr><tr><td>🛅</td><td>Mala trancada</td><td>U+1F6C5</td></tr><tr><td colspan="3"><strong>Emojis de aviso</strong></td></tr><tr><td>⚠️</td><td>Aviso</td><td>U+26A0</td></tr><tr><td>🚸</td><td>Crianças atravessando</td><td>U+1F6B8</td></tr><tr><td>⛔</td><td>Não entre</td><td>U+26D4</td></tr><tr><td>🚫</td><td>Entrada proibido</td><td>U+1F6AB</td></tr><tr><td>🚳</td><td>Proibido bicicletas</td><td>U+1F6B3</td></tr><tr><td>🚭</td><td>Proibido fumar</td><td>U+1F6AD</td></tr><tr><td>🚯</td><td>Não jogue lixo</td><td>U+1F6AF</td></tr><tr><td>🚱</td><td>Água não potável</td><td>U+1F6B1</td></tr><tr><td>🚷</td><td>Proibido pedestres</td><td>U+1F6B7</td></tr><tr><td>📵</td><td>Sem telefones celulares</td><td>U+1F4F5</td></tr><tr><td>🔞</td><td>Ninguém menor de 18 anos</td><td>U+1F51E</td></tr><tr><td>☢️</td><td>Radioativo</td><td>U+2622</td></tr><tr><td>☣️</td><td>Risco biológico</td><td>U+2623</td></tr><tr><td colspan="3"><strong>Emojis de seta</strong></td></tr><tr><td>⬆️</td><td>Seta para cima</td><td>U+2B06</td></tr><tr><td>↗️</td><td>Seta para cima-direita</td><td>U+2197</td></tr><tr><td>➡️</td><td>Seta direita</td><td>U+27A1</td></tr><tr><td>↘️</td><td>Seta para baixo-direita</td><td>U+2198</td></tr><tr><td>⬇️</td><td>Seta para baixo</td><td>U+2B07</td></tr><tr><td>↙️</td><td>Seta para baixo-esquerda</td><td>U+2199</td></tr><tr><td>⬅️</td><td>Seta esquerda</td><td>U+2B05</td></tr><tr><td>↖️</td><td>Seta para cima-esquerda</td><td>U+2196</td></tr><tr><td>↕️</td><td>Seta biderecional vertical</td><td>U+2195</td></tr><tr><td>↔</td><td>Seta biderecional horizontal</td><td>U+2194</td></tr><tr><td>↩️</td><td>Seta para a direita curvando para a esquerda</td><td>U+21A9</td></tr><tr><td>↪️</td><td>Seta para a esquerda curvando para a direita</td><td>U+21AA</td></tr><tr><td>⤴️</td><td>Seta para a direita curvando para cima</td><td>U+2934</td></tr><tr><td>⤵️</td><td>Seta para a direita curvando para baixo</td><td>U+2935</td></tr><tr><td>🔃</td><td>Setas verticais no sentido horário</td><td>U+1F503</td></tr><tr><td>🔄</td><td>Botão de setas no sentido anti-horário</td><td>U+1F504</td></tr><tr><td>🔙</td><td>Seta para trás</td><td>U+1F519</td></tr><tr><td>🔚</td><td>Seta final</td><td>U+1F51A</td></tr><tr><td>🔛</td><td>Ligado com seta</td><td>U+1F51B</td></tr><tr><td>🔜</td><td>Seta em breve</td><td>U+1F51C</td></tr><tr><td>🔝</td><td>Seta para cima</td><td>U+1F51D</td></tr><tr><td colspan="3"><strong>Religião</strong></td></tr><tr><td>🛐</td><td>Local de culto</td><td>U+1F6D0</td></tr><tr><td>⚛️</td><td>Átomo</td><td>U+269B</td></tr><tr><td>🕉️</td><td>Om</td><td>U+1F549</td></tr><tr><td>✡️</td><td>Estrela de Davi</td><td>U+2721</td></tr><tr><td>☸️</td><td>Roda do Dharma</td><td>U+2638</td></tr><tr><td>☯️</td><td>Yin yang</td><td>U+262F</td></tr><tr><td>✝️</td><td>Cruz latina</td><td>U+271D</td></tr><tr><td>☦️</td><td>Cruz ortodoxa</td><td>U+2626</td></tr><tr><td>☪️</td><td>Estrela e lua crescente</td><td>U+262A</td></tr><tr><td>☮️</td><td>Paz</td><td>U+262E</td></tr><tr><td>🕎</td><td>Menorá</td><td>U+1F54E</td></tr><tr><td>🔯</td><td>Estrela de seis pontas</td><td>U+1F52F</td></tr><tr><td colspan="3"><strong>Zodíaco</strong></td></tr><tr><td>♈</td><td>Áries</td><td>U+2648</td></tr><tr><td>♉</td><td>Touro</td><td>U+2649</td></tr><tr><td>♊</td><td>Gêmeos</td><td>U+264A</td></tr><tr><td>♋</td><td>Câncer</td><td>U+264B</td></tr><tr><td>♌</td><td>Leão</td><td>U+264C</td></tr><tr><td>♍</td><td>Virgem</td><td>U+264D</td></tr><tr><td>♎</td><td>Libra</td><td>U+264E</td></tr><tr><td>♏</td><td>Escorpião</td><td>U+264F</td></tr><tr><td>♐</td><td>Sagitário</td><td>U+2650</td></tr><tr><td>♑</td><td>Capricórnio</td><td>U+2651</td></tr><tr><td>♒</td><td>Aquário</td><td>U+2652</td></tr><tr><td>♓</td><td>Peixes</td><td>U+2653</td></tr><tr><td>⛎</td><td>Ophiuchus</td><td>U+26CE</td></tr><tr><td colspan="3"><strong>Símbolos AV</strong></td></tr><tr><td>🔀</td><td>Faixas aleatórias</td><td>U+1F500</td></tr><tr><td>🔁</td><td>Repita tudo</td><td>U+1F501</td></tr><tr><td>🔂</td><td>Repita um</td><td>U+1F502</td></tr><tr><td>▶️</td><td>Reproduzir</td><td>U+25B6</td></tr><tr><td>⏸</td><td>Pausa</td><td>U+23F8</td></tr><tr><td>⏩</td><td>Avanço rápido</td><td>U+23E9</td></tr><tr><td>⏭</td><td>Próxima faixa</td><td>U+23ED</td></tr><tr><td>⏯</td><td>Reproduzir ou pausar</td><td>U+23EF</td></tr><tr><td>◀️</td><td>Reprodução reversa</td><td>U+25C0</td></tr><tr><td>⏪</td><td>Reversão rápida</td><td>U+23EA</td></tr><tr><td>⏮</td><td>Faixa anterior</td><td>U+23EE</td></tr><tr><td>🔼</td><td>Para cima</td><td>U+1F53C</td></tr><tr><td>⏫</td><td>Rápido para cima</td><td>U+23EB</td></tr><tr><td>🔽</td><td>Para baixo</td><td>U+1F53D</td></tr><tr><td>⏬</td><td>Rápido para baixo</td><td>U+23EC</td></tr><tr><td>⏹</td><td>Pare</td><td>U+23F9</td></tr><tr><td>⏺</td><td>Gravar</td><td>U+23FA</td></tr><tr><td>⏏️</td><td>Ejetar</td><td>U+23CF</td></tr><tr><td>🎦</td><td>Cinema</td><td>U+1F3A6</td></tr><tr><td>🔅</td><td>Brilho baixo</td><td>U+1F505</td></tr><tr><td>🔆</td><td>Brilho alto</td><td>U+1F506</td></tr><tr><td>📶</td><td>Barras de antena de rede</td><td>U+1F4F6</td></tr><tr><td>📳</td><td>Modo de vibração</td><td>U+1F4F3</td></tr><tr><td>📴</td><td>Celular desligado</td><td>U+1F4F4</td></tr><tr><td colspan="3"><strong>Gênero</strong></td></tr><tr><td>♀</td><td>Feminino</td><td>U+2640</td></tr><tr><td>♂</td><td>Masculino</td><td>U+2642</td></tr><tr><td>⚧</td><td>Transgênero</td><td>U+26A7</td></tr><tr><td colspan="3"><strong>Símbolos matemáticos</strong></td></tr><tr><td>✖</td><td>Vezes</td><td>U+2716</td></tr><tr><td>➕</td><td>Mais</td><td>U+2795</td></tr><tr><td>➖</td><td>Menos</td><td>U+2796</td></tr><tr><td>➗</td><td>Dividir</td><td>U+2797</td></tr><tr><td>🟰</td><td>É igual a</td><td>U+1F7F0</td></tr><tr><td>♾️</td><td>Infinito</td><td>U+267E</td></tr><tr><td colspan="3"><strong>Símbolos de pontuação</strong></td></tr><tr><td>‼</td><td>Exclamação dupla</td><td>U+203C</td></tr><tr><td>⁉</td><td>Exclamação e ponto de interrogação</td><td>U+2049</td></tr><tr><td>❓</td><td>Ponto de interrogação vermelho</td><td>U+2753</td></tr><tr><td>❔</td><td>Ponto de interrogação branco</td><td>U+2754</td></tr><tr><td>❗</td><td>Ponto de exclamação vermelho</td><td>U+2757</td></tr><tr><td>❕</td><td>Ponto de exclamação branco</td><td>U+2755</td></tr><tr><td>〰️</td><td>Traço ondulado</td><td>U+3030</td></tr><tr><td colspan="3"><strong>Moeda</strong></td></tr><tr><td>💱</td><td>Câmbio monetário</td><td>U+1F4B1</td></tr><tr><td>💲</td><td>Sinal de dólar verde pesado</td><td>U+1F4B2</td></tr><tr><td colspan="3"><strong>Outros símbolos</strong></td></tr><tr><td>⚕️</td><td>Símbolo médico</td><td>U+2695</td></tr><tr><td>♻️</td><td>Símbolo de reciclagem</td><td>U+267B</td></tr><tr><td>⚜️</td><td>Flor-de-lis</td><td>U+269C</td></tr><tr><td>🔱</td><td>Tridente</td><td>U+1F531</td></tr><tr><td>📛</td><td>Crachá de nome</td><td>U+1F4DB</td></tr><tr><td>🔰</td><td>Símbolo japonês para iniciante</td><td>U+1F530</td></tr><tr><td>⭕</td><td>Círculo vermelho oco</td><td>U+2B55</td></tr><tr><td>✅</td><td>Marca de seleção em caixa verde</td><td>U+2705</td></tr><tr><td>☑️</td><td>Marca de seleção em caixa preta</td><td>U+2611</td></tr><tr><td>✔️</td><td>Marca de seleção</td><td>U+2714</td></tr><tr><td>❌</td><td>Marca cruzada</td><td>U+274C</td></tr><tr><td>❎</td><td>Marca cruzada em caixa verde</td><td>U+274E</td></tr><tr><td>➰</td><td>Laço encaracolado</td><td>U+27B0</td></tr><tr><td>➿</td><td>Laço duplo encaracolado</td><td>U+27BF</td></tr><tr><td>〽️</td><td>Marca de alternância de peças</td><td>U+303D</td></tr><tr><td>✳️</td><td>Asterisco de oito raios</td><td>U+2733</td></tr><tr><td>✴️</td><td>Estrela de oito pontas</td><td>U+2734</td></tr><tr><td>❇️</td><td>Brilhar</td><td>U+2747</td></tr><tr><td>©️</td><td>Direitos autorais</td><td>U+00A9</td></tr><tr><td>®</td><td>Registrado</td><td>U+00AE</td></tr><tr><td>™</td><td>Marca comercial</td><td>U+2122</td></tr><tr><td colspan="3"><strong>Teclado numérico</strong></td></tr><tr><td>#️⃣ </td><td>#</td><td>U+20E3</td></tr><tr><td>*️⃣</td><td>*</td><td>U+20E3</td></tr><tr><td>0️⃣</td><td>0</td><td>U+20E3</td></tr><tr><td>1️⃣</td><td>1</td><td>U+20E3</td></tr><tr><td>2️⃣</td><td>2</td><td>U+20E3</td></tr><tr><td>3️⃣</td><td>3</td><td>U+20E3</td></tr><tr><td>4️⃣</td><td>4</td><td>U+20E3</td></tr><tr><td>5️⃣</td><td>5</td><td>U+20E3</td></tr><tr><td>6️⃣</td><td>6</td><td>U+20E3</td></tr><tr><td>7️⃣</td><td>7</td><td>U+20E3</td></tr><tr><td>8️⃣</td><td>8</td><td>U+20E3</td></tr><tr><td>9️⃣</td><td>9</td><td>U+20E3</td></tr><tr><td>🔟</td><td>10</td><td>U+1F51F</td></tr><tr><td colspan="3"><strong>Símbolos alfanuméricos</strong></td></tr><tr><td>🔠</td><td>Insira letras maiúsculas latinas</td><td>U+1F520</td></tr><tr><td>🔡</td><td>Insira letras minúsculas latinas</td><td>U+1F521</td></tr><tr><td>🔢</td><td>Números de entrada</td><td>U+1F522</td></tr><tr><td>🔣</td><td>Símbolos de entrada</td><td>U+1F523</td></tr><tr><td>🔤</td><td>Insira letras latinas</td><td>U+1F524</td></tr><tr><td>🅰</td><td>Um tipo sanguíneo</td><td>U+1F170</td></tr><tr><td>🆎</td><td>Tipo sanguíneo AB</td><td>U+1F18E</td></tr><tr><td>🅱</td><td>tipo sanguíneo B</td><td>U+1F171</td></tr><tr><td>🅾</td><td>O tipo sanguíneo</td><td>U+1F17E</td></tr><tr><td>🆑</td><td>Botão CL</td><td>U+1F191</td></tr><tr><td>🆒</td><td>Botão legal</td><td>U+1F192</td></tr><tr><td>🆓</td><td>Botão gratuito</td><td>U+1F193</td></tr><tr><td>ℹ️</td><td>Botão de informações</td><td>U+2139</td></tr><tr><td>🆔</td><td>Botão de identificação</td><td>U+1F194</td></tr><tr><td>Ⓜ️</td><td>M circulado</td><td>U+24C2</td></tr><tr><td>🆕</td><td>Botão Novo</td><td>U+1F195</td></tr><tr><td>🆖</td><td>Botão NG</td><td>U+1F196</td></tr><tr><td>🆗</td><td>Botão OK</td><td>U+1F197</td></tr><tr><td>🅿</td><td>Botão P</td><td>U+1F17F</td></tr><tr><td>🆘</td><td>Botão SOS</td><td>U+1F198</td></tr><tr><td>🆙</td><td>Botão Up!</td><td>U+1F199</td></tr><tr><td>🆚</td><td>Botão VS</td><td>U+1F19A</td></tr><tr><td colspan="3"><strong>Botões Japoneses</strong></td></tr><tr><td>🈁</td><td>Botão japonês "aqui"</td><td>U+1F201</td></tr><tr><td>🈂️</td><td>Botão japonês "taxa de serviço"</td><td>U+1F202</td></tr><tr><td>🈷️</td><td>Botão japonês "quantidade mensal"</td><td>U+1F237</td></tr><tr><td>🈶</td><td>Botão japonês "não gratuito"</td><td>U+1F236</td></tr><tr><td>🈯</td><td>Botão japonês "reservado"</td><td>U+1F22F</td></tr><tr><td>🉐</td><td>Botão japonês "pechinchar"</td><td>U+1F250</td></tr><tr><td>🈹</td><td>Botão japonês "desconto"</td><td>U+1F239</td></tr><tr><td>🈚</td><td>Botão japonês "gratuito"</td><td>U+1F21A</td></tr><tr><td>🈲</td><td>Botão japonês "proibido"</td><td>U+1F232</td></tr><tr><td>🉑</td><td>Botão japonês "aceitável"</td><td>U+1F251</td></tr><tr><td>🈸</td><td>Botão "aplicativo" japonês</td><td>U+1F238</td></tr><tr><td>🈴</td><td>Botão japonês de "grau de aprovação"</td><td>U+1F234</td></tr><tr><td>🈳</td><td>Botão japonês "vaga"</td><td>U+1F233</td></tr><tr><td>㊗️</td><td>Botão japonês "parabéns"</td><td>U+3297</td></tr><tr><td>㊙️</td><td>Botão "segredo" japonês</td><td>U+3299</td></tr><tr><td>🈺</td><td>Botão japonês "aberto para negócios"</td><td>U+1F23A</td></tr><tr><td>🈵</td><td>Botão japonês "sem vagas"</td><td>U+1F235</td></tr><tr><td colspan="3"><strong>Emojis geométricos</strong></td></tr><tr><td>🔴</td><td>Círculo vermelho</td><td>U+1F534</td></tr><tr><td>🟠</td><td>Círculo laranja</td><td>U+1F7E0</td></tr><tr><td>🟡</td><td>Círculo amarelo</td><td>U+1F7E1</td></tr><tr><td>🟢</td><td>Círculo verde</td><td>U+1F7E2</td></tr><tr><td>🔵</td><td>Círculo azul</td><td>U+1F535</td></tr><tr><td>🟣</td><td>Círculo roxo</td><td>U+1F7E3</td></tr><tr><td>🟤</td><td>Círculo marrom</td><td>U+1F7E4</td></tr><tr><td>⚫</td><td>Círculo preto</td><td>U+26AB</td></tr><tr><td>⚪</td><td>Círculo branco</td><td>U+26AA</td></tr><tr><td>🟥</td><td>Quadrado vermelho</td><td>U+1F7E5</td></tr><tr><td>🟧</td><td>Quadrado laranja</td><td>U+1F7E5</td></tr><tr><td>🟨</td><td>Quadrado amarelo</td><td>U+1F7E8</td></tr><tr><td>🟩</td><td>Quadrado verde</td><td>U+1F7E9</td></tr><tr><td>🟦</td><td>Quadrado azul</td><td>U+1F7E6</td></tr><tr><td>🟪</td><td>Quadrado roxo</td><td>U+1F7EA</td></tr><tr><td>🟫</td><td>Quadrado marrom</td><td>U+1F7EB</td></tr><tr><td>⬛</td><td>Quadrado preto</td><td>U+2B1B</td></tr><tr><td>⬜</td><td>Quadrado branco</td><td>U+2B1C</td></tr><tr><td>🔶</td><td>Grande diamante laranja</td><td>U+1F536</td></tr><tr><td>🔷</td><td>Grande diamante azul</td><td>U+1F537</td></tr><tr><td>🔸</td><td>Diamante laranja pequeno</td><td>U+1F538</td></tr><tr><td>🔹</td><td>Diamante azul pequeno</td><td>U+1F539</td></tr><tr><td>🔺</td><td>Triângulo vermelho apontado para cima</td><td>U+1F53A</td></tr><tr><td>🔻</td><td>Triângulo vermelho apontado para baixo</td><td>U+1F53B</td></tr><tr><td>💠</td><td>Diamante com um ponto</td><td>U+1F4A0</td></tr><tr><td>🔘</td><td>Botão de radio</td><td>U+1F518</td></tr><tr><td>🔳</td><td>Botão quadrado preto</td><td>U+1F533</td></tr><tr><td>🔲</td><td>Botão quadrado branco</td><td>U+1F532</td></tr><tr><td colspan="3"><strong>Bandeiras</strong></td></tr><tr><td>🏁</td><td>Bandeira quadriculada</td><td>U+1F3C1</td></tr><tr><td>🚩</td><td>Bandeira triangular</td><td>U+1F6A9</td></tr><tr><td>🎌</td><td>Bandeira cruzada</td><td>U+1F38C</td></tr><tr><td>🏴</td><td>Bandeira preta</td><td>U+1F3F4</td></tr><tr><td>🏳</td><td>Bandeira branca</td><td>U+1F3F3</td></tr><tr><td>🌈</td><td>Bandeira do arco-íris</td><td>U+1F308</td></tr><tr><td>☠️</td><td>Bandeira pirata</td><td>U+2620</td></tr><tr><td colspan="3"><strong>Bandeiras do país</strong></td></tr><tr><td>🇦🇨</td><td>Bandeira da Ilha da Ascensão</td><td>U+1F1E8</td></tr><tr><td>🇦🇩</td><td>Bandeira de Andorra</td><td>U+1F1E9</td></tr><tr><td>🇦🇪</td><td>Bandeira dos Emirados Árabes Unidos</td><td>U+1F1EA</td></tr><tr><td>🇦🇫</td><td>Bandeira do Afeganistão</td><td>U+1F1EB</td></tr><tr><td>🇦🇬</td><td>Bandeira de Antígua e Berbuda</td><td>U+1F1EC</td></tr><tr><td>🇦🇮</td><td>Bandeira de Anguila</td><td>U+1F1EE</td></tr><tr><td>🇦🇱</td><td>Bandeira da Albânia</td><td>U+1F1F1</td></tr><tr><td>🇦🇲</td><td>Bandeira da Armênia</td><td>U+1F1F2</td></tr><tr><td>🇦🇴</td><td>Bandeira da Angola</td><td>U+1F1F4</td></tr><tr><td>🇦🇶</td><td>Bandeira da Antártida</td><td>U+1F1F6</td></tr><tr><td>🇦🇷</td><td>Bandeira da Argentina</td><td>U+1F1F7</td></tr><tr><td>🇦🇸</td><td>Bandeira da Samoa Americana</td><td>U+1F1F8</td></tr><tr><td>🇦🇹</td><td>Bandeira da Áustria</td><td>U+1F1F9</td></tr><tr><td>🇦🇺</td><td>Bandeira da Austrália</td><td>U+1F1FA</td></tr><tr><td>🇦🇼</td><td>Bandeira de Aruba</td><td>U+1F1FC</td></tr><tr><td>🇦🇽</td><td>Bandeira das Ilhas Åland</td><td>U+1F1FD</td></tr><tr><td>🇦🇿</td><td>Bandeira do Azerbaijão</td><td>U+1F1FF</td></tr><tr><td>🇧🇦</td><td>Bandeira da Bósnia</td><td>U+1F1E6</td></tr><tr><td>🇧🇧</td><td>Bandeira de Barbados</td><td>U+1F1E7</td></tr><tr><td>🇧🇩</td><td>Bandeira de Bangladesh</td><td>U+1F1E9</td></tr><tr><td>🇧🇪</td><td>Bandeira da Bélgica</td><td>U+1F1EA</td></tr><tr><td>🇧🇫</td><td>Bandeira de Burkina Faso</td><td>U+1F1EB</td></tr><tr><td>🇧🇬</td><td>Bandeira da Bulgária</td><td>U+1F1EC</td></tr><tr><td>🇧🇭</td><td>Bandeira do Bahrein</td><td>U+1F1ED</td></tr><tr><td>🇧🇮</td><td>Bandeira do Burundi</td><td>U+1F1EE</td></tr><tr><td>🇧🇯</td><td>Bandeira da República do Benin</td><td>U+1F1EF</td></tr><tr><td>🇧🇱</td><td>Bandeira de São Bartolomeu</td><td>U+1F1F1</td></tr><tr><td>🇧🇲</td><td>Bandeira das Bermudas</td><td>U+1F1F2</td></tr><tr><td>🇧🇳</td><td>Bandeira de Brunei</td><td>U+1F1F3</td></tr><tr><td>🇧🇴</td><td>Bandeira da Bolívia</td><td>U+1F1F4</td></tr><tr><td>🇧🇶</td><td>Bandeira da Holanda do Caribe</td><td>U+1F1F6</td></tr><tr><td>🇧🇷</td><td>Bandeira do Brasil</td><td>U+1F1F7</td></tr><tr><td>🇧🇸</td><td>Bandeira das Bahamas</td><td>U+1F1F8</td></tr><tr><td>🇧🇹</td><td>Bandeira do Butão</td><td>U+1F1F9</td></tr><tr><td>🇧🇻</td><td>Bandeira da Ilha Bouvet</td><td>U+1F1FB</td></tr><tr><td>🇧🇼</td><td>Bandeira do Botswana</td><td>U+1F1FC</td></tr><tr><td>🇧🇾</td><td>Bandeira da Bielorrússia</td><td>U+1F1FE</td></tr><tr><td>🇧🇿</td><td>Bandeira de Belize</td><td>U+1F1FF</td></tr><tr><td>🇨🇦</td><td>Bandeira do Canadá</td><td>U+1F1E6</td></tr><tr><td>🇨🇨</td><td>Bandeira das Ilhas Cocos</td><td>U+1F1E8</td></tr><tr><td>🇨🇩</td><td>Bandeira da República Democrática do Congo</td><td>U+1F1E9</td></tr><tr><td>🇨🇫</td><td>Bandeira da República Centro-Africana</td><td>U+1F1EB</td></tr><tr><td>🇨🇬</td><td>Bandeira do Congo Brazzaville</td><td>U+1F1EC</td></tr><tr><td>🇨🇭</td><td>Bandeira da Suíça</td><td>U+1F1ED</td></tr><tr><td>🇨🇮</td><td>Bandeira da Costa do Marfim</td><td>U+1F1EE</td></tr><tr><td>🇨🇰</td><td>Bandeira das Ilhas Cook</td><td>U+1F1F0</td></tr><tr><td>🇨🇱</td><td>Bandeira do Chile</td><td>U+1F1F1</td></tr><tr><td>🇨🇲</td><td>Bandeira de Camarões</td><td>U+1F1F2</td></tr><tr><td>🇨🇳</td><td>Bandeira da China</td><td>U+1F1F3</td></tr><tr><td>🇨🇴</td><td>Bandeira da Colômbia</td><td>U+1F1F4</td></tr><tr><td>🇨🇵</td><td>Bandeira da Ilha Clipperton</td><td>U+1F1F5</td></tr><tr><td>🇨🇷</td><td>Bandeira da Costa Rica</td><td>U+1F1F7</td></tr><tr><td>🇨🇺</td><td>Bandeira de Cuba</td><td>U+1F1FA</td></tr><tr><td>🇨🇻</td><td>Bandeira da Ilha de Cabo Verde</td><td>U+1F1FB</td></tr><tr><td>🇨🇼</td><td>Bandeira de Curaçao</td><td>U+1F1FC</td></tr><tr><td>🇨🇽</td><td>Bandeira da Ilha Natal</td><td>U+1F1FD</td></tr><tr><td>🇨🇾</td><td>Bandeira de Chipre</td><td>U+1F1FE</td></tr><tr><td>🇩🇪</td><td>Bandeira da Alemanha</td><td>U+1F1EA</td></tr><tr><td>🇩🇬</td><td>Bandeira de Diego Garcia</td><td>U+1F1EC</td></tr><tr><td>🇩🇯</td><td>Bandeira do Djibuti</td><td>U+1F1EF</td></tr><tr><td>🇩🇰</td><td>Bandeira da Dinamarca</td><td>U+1F1F0</td></tr><tr><td>🇩🇲</td><td>Bandeira de Dominica</td><td>U+1F1F2</td></tr><tr><td>🇩🇴</td><td>Bandeira da República Dominicana</td><td>U+1F1F4</td></tr><tr><td>🇩🇿</td><td>Bandeira da Argélia</td><td>U+1F1FF</td></tr><tr><td>🇪🇦</td><td>Bandeira de Ceuta e Melilha</td><td>U+1F1E6</td></tr><tr><td>🇪🇨</td><td>Bandeira do Equador</td><td>U+1F1E8</td></tr><tr><td>🇪🇪</td><td>Bandeira da Estônia</td><td>U+1F1EA</td></tr><tr><td>🇪🇬</td><td>Bandeira do Egito</td><td>U+1F1EC</td></tr><tr><td>🇪🇭</td><td>Bandeira do Saara Ocidental</td><td>U+1F1ED</td></tr><tr><td>🇪🇷</td><td>Bandeira da Eritreia</td><td>U+1F1F7</td></tr><tr><td>🇪🇸</td><td>Bandeira da Espanha</td><td>U+1F1F8</td></tr><tr><td>🇪🇹</td><td>Bandeira da Etiópia</td><td>U+1F1F9</td></tr><tr><td>🇪🇺</td><td>Bandeira da UE</td><td>U+1F1FA</td></tr><tr><td>🇫🇮</td><td>Bandeira da Finlândia</td><td>U+1F1EE</td></tr><tr><td>🇫🇯</td><td>Bandeira de Fiji</td><td>U+1F1EF</td></tr><tr><td>🇫🇰</td><td>Bandeira das Ilhas Malvinas</td><td>U+1F1F0</td></tr><tr><td>🇫🇲</td><td>Bandeira da Micronésia</td><td>U+1F1F2</td></tr><tr><td>🇫🇴</td><td>Bandeira das Ilhas Faroé</td><td>U+1F1F4</td></tr><tr><td>🇫🇷</td><td>Bandeira da França</td><td>U+1F1F7</td></tr><tr><td>🇬🇦</td><td>Bandeira do Gabão</td><td>U+1F1E6</td></tr><tr><td>🇬🇧</td><td>Bandeira do Reino Unido</td><td>U+1F1E7</td></tr><tr><td>🇬🇩</td><td>Bandeira de Granada</td><td>U+1F1E9</td></tr><tr><td>🇬🇪</td><td>Bandeira da Geórgia</td><td>U+1F1EA</td></tr><tr><td>🇬🇫</td><td>Bandeira da Guiana Francesa</td><td>U+1F1EB</td></tr><tr><td>🇬🇬</td><td>Bandeira de Guernsey</td><td>U+1F1EC</td></tr><tr><td>🇬🇭</td><td>Bandeira de Gana</td><td>U+1F1ED</td></tr><tr><td>🇬🇮</td><td>Bandeira de Gibraltar</td><td>U+1F1EE</td></tr><tr><td>🇬🇱</td><td>Bandeira da Groenlândia</td><td>U+1F1F1</td></tr><tr><td>🇬🇲</td><td>Bandeira da Gâmbia</td><td>U+1F1F2</td></tr><tr><td>🇬🇳</td><td>Bandeira da Guiné</td><td>U+1F1F3</td></tr><tr><td>🇵🇵</td><td>Bandeira de Guadalupe</td><td>U+1F1F5</td></tr><tr><td>🇬🇶</td><td>Bandeira da Guiné Equatorial</td><td>U+1F1F6</td></tr><tr><td>🇬🇷</td><td>Bandeira da Grécia</td><td>U+1F1F7</td></tr><tr><td>🇬🇸</td><td>Bandeira das Ilhas Geórgia do Sul e Sandwich do Sul</td><td>U+1F1F8</td></tr><tr><td>🇬🇹</td><td>Bandeira da Guatemala</td><td>U+1F1F9</td></tr><tr><td>🇬🇺</td><td>Bandeira de Guam</td></tr><tr><td>🇬🇼</td><td>Bandeira da Guiné-Bissau</td><td>U+1F1FC</td></tr><tr><td>🇬🇾</td><td>Bandeira da Guiana</td><td>U+1F1FE</td></tr><tr><td>🇭🇰</td><td>Bandeira de Hong Kong</td><td>U+1F1F0</td></tr><tr><td>🇭🇲</td><td>Bandeira das Ilhas McDonald</td><td>U+1F1F2</td></tr><tr><td>🇭🇳</td><td>Bandeira de Honduras</td><td>U+1F1F3</td></tr><tr><td>🇭🇷</td><td>Bandeira da Croácia</td><td>U+1F1F7</td></tr><tr><td>🇭🇹</td><td>Bandeira do Haiti</td><td>U+1F1F9</td></tr><tr><td>🇭🇺</td><td>Bandeira da Hungria</td><td>U+1F1FA</td></tr><tr><td>🇮🇨</td><td>Bandeira das Ilhas Canárias</td><td>U+1F1E8</td></tr><tr><td>🇮🇩</td><td>Bandeira da Indonésia</td><td>U+1F1E9</td></tr><tr><td>🇮🇪</td><td>Bandeira da ilha</td><td>U+1F1EA</td></tr><tr><td>🇮🇱</td><td>Bandeira de Israel</td><td>U+1F1F1</td></tr><tr><td>🇮🇲</td><td>Bandeira da Ilha de Man</td><td>U+1F1F2</td></tr><tr><td>🇮🇳</td><td>Bandeira da Índia</td><td>U+1F1F3</td></tr><tr><td>🇮🇴</td><td>Bandeira do Território Britânico do Oceano Índico</td><td>U+1F1F4</td></tr><tr><td>🇮🇶</td><td>Bandeira do Iraque</td><td>U+1F1F6</td></tr><tr><td>🇮🇷</td><td>Bandeira do Irã</td><td>U+1F1F7</td></tr><tr><td>🇮🇸</td><td>Bandeira da Islândia</td><td>U+1F1F8</td></tr><tr><td>🇮🇹</td><td>Bandeira da Itália</td><td>U+1F1F9</td></tr><tr><td>🇯🇪</td><td>Bandeira de Jersey</td><td>U+1F1EA</td></tr><tr><td>🇯🇲</td><td>Bandeira da Jamaica</td><td>U+1F1F2</td></tr><tr><td>🇯🇴</td><td>Bandeira da Jordânia</td><td>U+1F1F4</td></tr><tr><td>🇯🇵</td><td>Bandeira do Japão</td><td>U+1F1F5</td></tr><tr><td>🇰🇪</td><td>Bandeira do Quênia</td><td>U+1F1EA</td></tr><tr><td>🇰🇬</td><td>Bandeira do Quirguistão</td><td>U+1F1EC</td></tr><tr><td>🇰🇭</td><td>Bandeira do Camboja</td><td>U+1F1ED</td></tr><tr><td>🇰🇮</td><td>Bandeira de Kiribati</td><td>U+1F1EE</td></tr><tr><td>🇰🇲</td><td>Bandeira das Ilhas Comores</td><td>U+1F1F2</td></tr><tr><td>🇰🇳</td><td>Bandeira de São Cristóvão e Nevis</td><td>U+1F1F3</td></tr><tr><td>🇰🇵</td><td>Bandeira da Coreia do Norte</td><td>U+1F1F5</td></tr><tr><td>🇰🇷</td><td>Bandeira da Coreia do Sul</td><td>U+1F1F7</td></tr><tr><td>🇰🇼</td><td>Bandeira do Kuwait</td><td>U+1F1FC</td></tr><tr><td>🇰🇾</td><td>Bandeira das Ilhas Cayman</td><td>U+1F1FE</td></tr><tr><td>🇰🇿</td><td>Bandeira do Cazaquistão</td><td>U+1F1FF</td></tr><tr><td>🇱🇦</td><td>Bandeira do Laos</td><td>U+1F1E6</td></tr><tr><td>🇱🇧</td><td>Bandeira do Líbano</td><td>U+1F1E7</td></tr><tr><td>🇱🇨</td><td>Bandeira de Santa Lúcia</td><td>U+1F1E8</td></tr><tr><td>🇱🇮</td><td>Bandeira de Liechtenstein</td><td>U+1F1EE</td></tr><tr><td>🇱🇰</td><td>Bandeira do Sri Lanka</td><td>U+1F1F0</td></tr><tr><td>🇱🇷</td><td>Bandeira da Libéria</td><td>U+1F1F7</td></tr><tr><td>🇱🇸</td><td>Bandeira do Lesoto</td><td>U+1F1F8</td></tr><tr><td>🇱🇹</td><td>Bandeira da Lituânia</td><td>U+1F1F9</td></tr><tr><td>🇱🇻</td><td>Bandeira da Letônia</td><td>U+1F1FB</td></tr><tr><td>🇱🇾</td><td>Bandeira da Líbia</td><td>U+1F1FE</td></tr><tr><td>🇲🇦</td><td>Bandeira de Marrocos</td><td>U+1F1E6</td></tr><tr><td>🇲🇨</td><td>Bandeira de Mônaco</td><td>U+1F1E8</td></tr><tr><td>🇲🇩</td><td>Bandeira da Moldávia</td><td>U+1F1E9</td></tr><tr><td>🇲🇪</td><td>Bandeira de Montenegro</td><td>U+1F1EA</td></tr><tr><td>🇲🇬</td><td>Bandeira de Montenegro</td><td>U+1F1EC</td></tr><tr><td>🇲🇭</td><td>Bandeira das Ilhas Marshall</td><td>U+1F1ED</td></tr><tr><td>🇲🇰</td><td>Bandeira da Macedônia do Norte</td><td>U+1F1F0</td></tr><tr><td>🇲🇱</td><td>Bandeira do Mali</td><td>U+1F1F1</td></tr><tr><td>🇲🇲</td><td>Bandeira de Mianmar</td><td>U+1F1F2</td></tr><tr><td>🇲🇳</td><td>Bandeira da Mongólia</td><td>U+1F1F3</td></tr><tr><td>🇲🇴</td><td>Bandeira de Macau</td><td>U+1F1F4</td></tr><tr><td>🇲🇵</td><td>Bandeira das Ilhas Marianas do Norte</td><td>U+1F1F5</td></tr><tr><td>🇲🇶</td><td>Bandeira da Martinica</td><td>U+1F1F6</td></tr><tr><td>🇲🇷</td><td>Bandeira da Mauritânia</td><td>U+1F1F7</td></tr><tr><td>🇲🇸</td><td>Bandeira de Montserrat</td><td>U+1F1F8</td></tr><tr><td>🇲🇹</td><td>Bandeira de Malta</td><td>U+1F1F9</td></tr><tr><td>🇲🇺</td><td>Bandeira de Maurício</td><td>U+1F1FA</td></tr><tr><td>🇲🇻</td><td>Bandeira das Maldivas</td><td>U+1F1FB</td></tr><tr><td>🇲🇼</td><td>Bandeira do Malawi</td><td>U+1F1FC</td></tr><tr><td>🇲🇽</td><td>Bandeira do México</td><td>U+1F1FD</td></tr><tr><td>🇲🇾</td><td>Bandeira da Malásia</td><td>U+1F1FE</td></tr><tr><td>🇲🇿</td><td>Bandeira de Moçambique</td><td>U+1F1FF</td></tr><tr><td>🇳🇦</td><td>Bandeira da Namíbia</td><td>U+1F1E6</td></tr><tr><td>🇳🇨</td><td>Bandeira da Nova Caledônia</td><td>U+1F1E8</td></tr><tr><td>🇳🇪</td><td>Bandeira do Níger</td><td>U+1F1EA</td></tr><tr><td>🇳🇫</td><td>Bandeira da Ilha Norfolk</td><td>U+1F1EB</td></tr><tr><td>🇳🇬</td><td>Bandeira da Nigéria</td><td>U+1F1EC</td></tr><tr><td>🇳🇮</td><td>Bandeira da Nicarágua</td><td>U+1F1EE</td></tr><tr><td>🇳🇱</td><td>Bandeira da Holanda</td><td>U+1F1F1</td></tr><tr><td>🇳🇴</td><td>Bandeira da Noruega</td><td>U+1F1F4</td></tr><tr><td>🇳🇵</td><td>Bandeira do Nepal</td><td>U+1F1F5</td></tr><tr><td>🇳🇷</td><td>Bandeira de Nauru</td><td>U+1F1F7</td></tr><tr><td>🇳🇺</td><td>Bandeira de Niue</td><td>U+1F1FA</td></tr><tr><td>🇳🇿</td><td>Bandeira da Nova Zelândia</td><td>U+1F1FF</td></tr><tr><td>🇴🇲</td><td>Bandeira de Omã</td><td>U+1F1F2</td></tr><tr><td>🇵🇦</td><td>Bandeira do Panamá</td><td>U+1F1E6</td></tr><tr><td>🇵🇪</td><td>Bandeira do Peru</td><td>U+1F1EA</td></tr><tr><td>🇵🇫</td><td>Bandeira da Polinésia Francesa</td><td>U+1F1EB</td></tr><tr><td>🇵🇬</td><td>Bandeira de Papua Nova Guiné</td><td>U+1F1EC</td></tr><tr><td>🇵🇭</td><td>Bandeira das Filipinas</td><td>U+1F1ED</td></tr><tr><td>🇵🇰</td><td>Bandeira do Paquistão</td><td>U+1F1F0</td></tr><tr><td>🇵🇱</td><td>Bandeira da Polônia</td><td>U+1F1F1</td></tr><tr><td>🇵🇲</td><td>Bandeira de São Pedro e Miquelon</td><td>U+1F1F2</td></tr><tr><td>🇵🇳</td><td>Bandeira das Ilhas Pitcairn</td><td>U+1F1F3</td></tr><tr><td>🇵🇷</td><td>Bandeira de Porto Rico</td><td>U+1F1F7</td></tr><tr><td>🇵🇸</td><td>Bandeira dos Territórios Palestinos</td><td>U+1F1F8</td></tr><tr><td>🇵🇹</td><td>Bandeira de Portugal</td><td>U+1F1F9</td></tr><tr><td>🇵🇼</td><td>Bandeira de Palau</td><td>U+1F1FC</td></tr><tr><td>🇵🇾</td><td>Bandeira do Paraguai</td><td>U+1F1FE</td></tr><tr><td>🇶🇦</td><td>Bandeira do Catar</td><td>U+1F1E6</td></tr><tr><td>🇷🇪</td><td>Bandeira da Reunião</td><td>U+1F1EA</td></tr><tr><td>🇷🇸</td><td>Bandeira da Sérvia</td><td>U+1F1F8</td></tr><tr><td>🇷🇺</td><td>Bandeira da Rússia</td><td>U+1F1FA</td></tr><tr><td>🇷🇼</td><td>Bandeira de Ruanda</td><td>U+1F1FC</td></tr><tr><td>🇸🇦</td><td>Bandeira da Arábia Saudita</td><td>U+1F1E6</td></tr><tr><td>🇸🇧</td><td>Bandeira das Ilhas Salomão</td><td>U+1F1E7</td></tr><tr><td>🇸🇨</td><td>Bandeira de Seychelles</td><td>U+1F1E8</td></tr><tr><td>🇸🇩</td><td>Bandeira do Sudão</td><td>U+1F1E9</td></tr><tr><td>🇸🇪</td><td>Bandeira da Suécia</td><td>U+1F1EA</td></tr><tr><td>🇸🇬</td><td>Bandeira de Cingapura</td><td>U+1F1EC</td></tr><tr><td>🇸🇭</td><td>Bandeira de Santa Helena</td><td>U+1F1ED</td></tr><tr><td>🇸🇮</td><td>Bandeira da Eslovênia</td><td>U+1F1EE</td></tr><tr><td>🇸🇯</td><td>Bandeira de Svalbard e Jan Mayen</td><td>U+1F1EF</td></tr><tr><td>🇸🇰</td><td>Bandeira da Eslováquia</td><td>U+1F1F0</td></tr><tr><td>🇸🇱</td><td>Bandeira de Serra Leoa</td><td>U+1F1F1</td></tr><tr><td>🇸🇲</td><td>Bandeira de São Marinho</td><td>U+1F1F2</td></tr><tr><td>🇸🇳</td><td>Bandeira do Senegal</td><td>U+1F1F3</td></tr><tr><td>🇸🇴</td><td>Bandeira da Somália</td><td>U+1F1F4</td></tr><tr><td>🇸🇷</td><td>Bandeira do Suriname</td><td>U+1F1F7</td></tr><tr><td>🇸🇸</td><td>Bandeira do Sudão do Sul</td><td>U+1F1F8</td></tr><tr><td>🇸🇹</td><td>Bandeira de São Tomé e Príncipe</td><td>U+1F1F9</td></tr><tr><td>🇸🇻</td><td>Bandeira de salvador</td><td>U+1F1FB</td></tr><tr><td>🇸🇽</td><td>Bandeira de São Martinho</td><td>U+1F1FD</td></tr><tr><td>🇸🇾</td><td>Bandeira da Síria</td><td>U+1F1FE</td></tr><tr><td>🇸🇿</td><td>Bandeira de Eswatini (Suazilândia)</td><td>U+1F1FF</td></tr><tr><td>🇹🇦</td><td>Bandeira Tristão da Cunha</td><td>U+1F1E6</td></tr><tr><td>🇹🇨</td><td>Bandeira das Ilhas Turcas e Caicos</td><td>U+1F1E8</td></tr><tr><td>🇹🇩</td><td>Bandeira do Chade</td><td>U+1F1E9</td></tr><tr><td>🇹🇫</td><td>Bandeira dos Territórios do Sul da França</td><td>U+1F1EB</td></tr><tr><td>🇹🇬</td><td>Bandeira do Togo</td><td>U+1F1EC</td></tr><tr><td>🇹🇭</td><td>Bandeira da Tailândia</td><td>U+1F1ED</td></tr><tr><td>🇹🇯</td><td>Bandeira do Tajiquistão</td><td>U+1F1EF</td></tr><tr><td>🇹🇰</td><td>Bandeira de Tokelau</td><td>U+1F1F0</td></tr><tr><td>🇹🇱</td><td>Bandeira de Timor-Leste</td><td>U+1F1F1</td></tr><tr><td>🇹🇲</td><td>Bandeira do Turcomenistão</td><td>U+1F1F2</td></tr><tr><td>🇹🇳</td><td>Bandeira da Tunísia</td><td>U+1F1F3</td></tr><tr><td>🇹🇴</td><td>Bandeira de Tonga</td><td>U+1F1F4</td></tr><tr><td>🇹🇷</td><td>Bandeira da Turquia</td><td>U+1F1F7</td></tr><tr><td>🇹🇹</td><td>Bandeira de Trinidad e Tobago</td><td>U+1F1F9</td></tr><tr><td>🇹🇻</td><td>Bandeira de Tuvalu</td><td>U+1F1FB</td></tr><tr><td>🇹🇼</td><td>Bandeira de Taiwan</td><td>U+1F1FC</td></tr><tr><td>🇹🇿</td><td>Bandeira da Tanzânia</td><td>U+1F1FF</td></tr><tr><td>🇺🇦</td><td>Bandeira da Ucrânia</td><td>U+1F1E6</td></tr><tr><td>🇺🇬</td><td>Bandeira de Uganda</td><td>U+1F1EC</td></tr><tr><td>🇺🇲</td><td>Bandeira das Ilhas Distantes dos EUA</td><td>U+1F1F2</td></tr><tr><td>🇺🇳</td><td>Bandeira das Nações Unidas (ONU)</td><td>U+1F1F3</td></tr><tr><td>🇺🇸</td><td>Bandeira dos Estados Unidos</td><td>U+1F1F8</td></tr><tr><td>🇺🇾</td><td>Bandeira do Uruguai</td><td>U+1F1FE</td></tr><tr><td>🇺🇿</td><td>Bandeira do Uzbequistão</td><td>U+1F1FF</td></tr><tr><td>🇻🇦</td><td>Bandeira da Cidade do Vaticano</td><td>U+1F1E6</td></tr><tr><td>🇻🇨</td><td>Bandeira de São Vicente e Granadinas</td><td>U+1F1E8</td></tr><tr><td>🇻🇪</td><td>Bandeira da Venezuela</td><td>U+1F1EA</td></tr><tr><td>🇻🇬</td><td>Bandeira das Ilhas Virgens Britânicas</td><td>U+1F1EC</td></tr><tr><td>🇻🇮</td><td>Bandeira das Ilhas Virgens Americanas</td><td>U+1F1EE</td></tr><tr><td>🇻🇮</td><td>Bandeira do Vietnã</td><td>U+1F1F3</td></tr><tr><td>🇻🇺</td><td>Bandeira de Vanuatu</td><td>U+1F1FA</td></tr><tr><td>🇼🇫</td><td>Bandeira de Wallis e Futuna</td><td>U+1F1EB</td></tr><tr><td>🇼🇸</td><td>Bandeira de Samoa</td><td>U+1F1F8</td></tr><tr><td>🇽🇰</td><td>Bandeira do Kosovo</td><td>U+1F1F0</td></tr><tr><td>🇾🇪</td><td>Bandeira do Iêmen</td><td>U+1F1EA</td></tr><tr><td>🇾🇹</td><td>Bandeira de Maiote</td><td>U+1F1F9</td></tr><tr><td>🇿🇦</td><td>Bandeira da África do Sul</td><td>U+1F1E6</td></tr><tr><td>🇿🇲</td><td>Bandeira da Zâmbia</td><td>U+1F1F2</td></tr><tr><td>🇿🇼</td><td>Bandeira do Zimbábue</td><td>U+1F1FC</td></tr><tr><td colspan="3"><strong>Bandeiras da subdivisão britânica</strong></td></tr><tr><td>🏴󠁧󠁢󠁥󠁮󠁧󠁿</td><td>Bandeira da Inglaterra</td><td>U+E0067</td></tr><tr><td>🏴󠁧󠁢󠁳󠁣󠁴󠁿</td><td>Bandeira da Escócia</td><td>U+E0062</td></tr><tr><td>🏴󠁧󠁢󠁷󠁬󠁳󠁿</td><td>Bandeira do País de Gales</td><td>U+E0073</td></tr></tbody></table><!--kg-card-end: html--><p>Obrigado pela leitura. Se você achou este artigo útil, compartilhe com seus amigos.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Percorrer objetos em JavaScript – Como iterar em um Objeto no JS ]]>
                </title>
                <description>
                    <![CDATA[ Em JavaScript, quando você ouve o termo "laço", provavelmente pensa em usar os vários métodos de laço, como os laços for [https://www.freecodecamp.org/news/javascript-for-loops/] [https://www.freecodecamp.org/news/javascript-for-loops/], forEach() [https://www.freecodecamp.org/news/javascript-foreach-js-array-for-each-example/] [https://www.freecodecamp.org/news/javascript-foreach-js-array-for-each-example/] , map(), dentre outros (textos nos links em inglês). No caso de objetos, infelizmente,  ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/percorrer-objetos-no-javascript-como-iterar-em-um-objeto-no-js/</link>
                <guid isPermaLink="false">62daef45fea2f10707d66cac</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Mon, 29 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/Capa-FCC-3.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-iterate-over-objects-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Loop Through an Object in JavaScript – How to Iterate Over an Object in JS</a>
      </p><p>Em JavaScript, quando você ouve o termo "laço", provavelmente pensa em usar os vários métodos de laço, como os <a href="https://www.freecodecamp.org/news/javascript-for-loops/">laços </a><a href="https://www.freecodecamp.org/news/javascript-for-loops/"><code>for</code></a>, <a href="https://www.freecodecamp.org/news/javascript-foreach-js-array-for-each-example/"><code></code></a><code><a href="https://www.freecodecamp.org/news/javascript-foreach-js-array-for-each-example/">forEach()</a></code>, <code>map()</code>, dentre outros (textos nos links em inglês).</p><p>No caso de objetos, infelizmente, esses métodos não funcionam, pois objetos não são iteráveis. 😒</p><p>Isso não significa que não podemos ter um laço em um objeto – mas que não podemos iterar em um objeto diretamente, da mesma forma que fazemos em um array:</p><pre><code class="language-js">let arr = [24, 33, 77];
arr.forEach((val) =&gt; console.log(val)); // ✅

for (val of arr) {
  console.log(val); // ✅
}

let obj = { idade: 12, nome: "Fulano de Tal" };
obj.forEach((val) =&gt; console.log(val)); // ❌

for (val of obj) {
  console.log(val); // ❌
}
</code></pre><p>Neste artigo, você aprenderá como fazer um laço em um objeto em JavaScript. Existem dois métodos que você pode usar - sendo um deles anterior à introdução do ES6.</p><h2 id="como-iterar-por-um-objeto-em-javascript-com-um-la-o-for-in"><strong>Como iterar por um objeto em JavaScript com um laço <code>for…in</code></strong></h2><p>Antes da especificação ES6, utilizávamos o método <code>for...in</code> sempre que queríamos iterar em um objeto.</p><p>O laço <code>for...in</code> itera pelas propriedades do protótipo do objeto. Isso faz com que sempre que precisemos iterar em um objeto com o laço <code>for…in</code>, precisamos verificar se a propriedade pertence ao objeto usando o método <code>hasOwnProperty</code>, assim:</p><pre><code class="language-js">const populacao = {
  macho: 4,
  femea: 93,
  outros: 10
};

// Iteração pelo objeto
for (const chave in populacao) {
  if (populacao.hasOwnProperty(chave)) {
    console.log(`${chave}: ${populacao[chave]}`);
  }
}
</code></pre><p>Para evitar o estresse e a dificuldade desse laço e depender do método <code>hasOwnProperty</code> para verificar se há aquela propriedade, o ES6 e ES8 introduziram métodos estáticos de objetos. Eles convertem as propriedades do objeto em arrays, permitindo-nos usar métodos de array diretamente.</p><h2 id="como-iterar-um-objeto-em-javascript-com-m-todos-est-ticos-de-objeto"><strong>Como iterar um objeto em JavaScript com métodos estáticos de objeto</strong></h2><p>Um objeto é formado por propriedades, que têm pares chave-valor, ou seja, cada propriedade sempre terá um valor correspondente.</p><p>Os métodos estáticos de objeto nos permitem extrair <code>keys()</code>, <code>values()</code> ou ambas (chaves e valores) como entradas, pelo método <code>entries()</code>, para um array, permitindo-nos ter tanta flexibilidade sobre eles quanto temos com arrays reais.</p><p>Temos três métodos estáticos de objeto, que são:</p><ul><li><code>Object.keys()</code></li><li><code>Object.values()</code></li><li><code>Object.entries()</code></li></ul><h3 id="como-iterar-um-objeto-em-javascript-com-o-m-todo-object-keys-"><strong>Como iterar um objeto em JavaScript com o método <code>Object.keys()</code></strong></h3><p>O método <code>Object.keys()</code> foi introduzido no ES6. Ele pega como argumento o objeto no qual queremos fazer um laço e retorna um array contendo todos os nomes de propriedades.</p><pre><code class="language-js">const populacao = {
  macho: 4,
  femea: 93,
  outros: 10
};

let generos = Object.keys(populacao);

console.log(generos); // ["macho","femea","outros"]
</code></pre><p>Isso agora nos permite usar qualquer método de iteração de array no array das chaves e recuperar o valor de cada propriedade do objeto:</p><pre><code class="language-js">let generos = Object.keys(populacao);

generos.forEach((genero) =&gt; console.log(genero));
</code></pre><p>Isso retornará:</p><pre><code class="language-bash">"macho"
"femea"
"outros"
</code></pre><p>Também podemos usar a chave para obter o valor usando a notação de colchetes, como <code>populacao[genero]</code>:</p><pre><code class="language-js">generos.forEach((genero) =&gt; {
  console.log(`Há ${populacao[genero]} ${genero}`);
})
</code></pre><p>Isso retornará:</p><pre><code class="language-bash">"Há 4 macho"
"Há 93 femea"
"Há 10 outros"
</code></pre><p>Antes de continuarmos, vamos usar esse método para somar toda a população fazendo um laço para sabermos a população total:</p><pre><code class="language-js">const populacao = {
  macho: 4,
  femea: 93,
  outros: 10
};

let totalPopulacao = 0;
let generos = Object.keys(populacao);

generos.forEach((genero) =&gt; {
  totalPopulacao += populacao[genero];
});

console.log(totalPopulacao); // 107
</code></pre><h3 id="como-iterar-um-objeto-em-javascript-com-o-m-todo-object-values-"><strong>Como iterar um objeto em JavaScript com o método <code>Object.values()</code></strong></h3><p>O método <code>Object.values()</code> é muito semelhante ao método <code>Object.keys()</code> e foi introduzido no ES8. Este método utiliza como um argumento o objeto em que queremos fazer um laço e retorna um array contendo todos os valores de chave.</p><pre><code class="language-js">const populacao = {
  macho: 4,
  femea: 93,
  outros: 10
};

let numeros = Object.values(populacao);

console.log(numeros); // [4,93,10]
</code></pre><p>Isso agora nos permite utilizar qualquer método de iteração de array para recuperar o valor (<code>value</code>) de cada propriedade:</p><pre><code class="language-js">let numeros = Object.values(populacao);

numeros.forEach((numero) =&gt; console.log(numeros));
</code></pre><p>Isso retornará:</p><pre><code class="language-bash">4
93
10
</code></pre><p>Agora, podemos realizar o cálculo do total com eficiência, pois podemos fazer um laço diretamente no objeto, assim:</p><pre><code class="language-js">let totalPopulacao = 0;
let numeros = Object.values(populacao);

numeros.forEach((numero) =&gt; {
  totalPopulacao += numero;
});

console.log(totalPopulacao); // 107
</code></pre><h3 id="como-iterar-um-objeto-em-javascript-com-o-m-todo-object-entries-"><strong>Como iterar um objeto em JavaScript com o método <code>Object.entries()</code></strong></h3><p>O método <code>Object.entries()</code> também foi introduzido com o ES8. Basicamente, o que ele faz é gerar um array de arrays, em que cada array interno possui dois elementos: a propriedade e o valor. Aqui vemos um exemplo:</p><pre><code class="language-js">const populacao = {
  macho: 4,
  femea: 93,
  outros: 10
};

let populacaoArr = Object.entries(populacao);

console.log(populacaoArr);
</code></pre><p>Isso retorna:</p><pre><code class="language-bash">[
  ['macho', 4]
  ['femea', 93]
  ['outros', 10]
]
</code></pre><p>Você pode usar qualquer método de array para percorrê-lo também:</p><pre><code class="language-js">for (array of populacaoArr){
  console.log(array);
}

// Output:
// ['macho', 4]
// ['femea', 93]
// ['outros', 10]
</code></pre><p>Se quisermos <a href="https://www.freecodecamp.org/news/destructuring-patterns-javascript-arrays-and-objects/">desestruturar o array</a> (texto em inglês), obteremos a chave (<code>key</code>) e o valor (<code>value</code>):</p><pre><code class="language-js">for ([chave, valor] of populacaoArr){
  console.log(chave);
} 
</code></pre><p>Você pode aprender mais sobre como <a href="https://www.freecodecamp.org/news/how-to-loop-through-an-array-in-javascript-js-iterate-tutorial/">iterar em arrays neste artigo</a> (texto em inglês).</p><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Neste tutorial, aprendemos que a melhor forma de iterarmos por um objeto é utilizando um dos métodos estáticos de objeto, de acordo com suas necessidades, convertendo o objeto em um array antes de percorrê-lo com um laço.</p><p>Divirta-se escrevendo código!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como começar com o Node.js – Guia para iniciantes em Node ]]>
                </title>
                <description>
                    <![CDATA[ O Node.js é um ambiente de execução de JavaScript que estende sua capacidade para o lado do servidor. Ele foi construído a partir da máquina virtual do V8, a mesma que é utilizada para executar o Javascript no Chrome. O Node é orientado a eventos, seguindo um modelo de I/O ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-comecar-com-o-node-js-guia-para-iniciantes-em-node/</link>
                <guid isPermaLink="false">62df141cfea2f10707d6769a</guid>
                
                    <category>
                        <![CDATA[ Node.js ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Thu, 25 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/1200px-Node.js_logo.svg-1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/introduction-to-nodejs/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Get Started with Node.js – Beginner's Guide to Node</a>
      </p><p>O Node.js é um ambiente de execução de JavaScript que estende sua capacidade para o lado do servidor. Ele foi construído a partir da máquina virtual do V8, a mesma que é utilizada para executar o Javascript no Chrome.</p><p>O Node é orientado a eventos, seguindo um modelo de I/O (entrada e saída) sem bloqueio. Isso significa que ele é assíncrono e não se bloqueia para uma requisição (passando imediatamente para a próxima). É isso o que torna o Node extraordinariamente rápido e eficiente, utilizando apenas uma thread para isso tudo.</p><p>Por ser orientado a eventos, quando o Node é inicializado, ele inicia todas as variáveis ​​e funções e fica aguardando a ocorrência de um evento.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/image-4.png" class="kg-image" alt="image-4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/image-4.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/image-4.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/image-4.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="734" loading="lazy"></figure><p>Para facilitar a evolução de projetos de software, existem bibliotecas e módulos prontos, disponibilizados pela internet, que executam funções rotineiras, fazendo com que não precisemos gastar tempo criando-as do zero. Eles geralmente são encapsulados em pacotes e distribuídos por repositórios na internet. Para gerenciar esses pacotes dentro de uma aplicação, existem os gerenciadores de pacotes.</p><p>Os gerenciadores de pacotes são responsáveis por instalar, atualizar ou remover essas dependências do seu projeto. O maior gerenciador de pacotes que existe para Node do mundo é o NPM, que é a abreviação de Node Package Manager (gerenciador de pacotes do Node). Já o NPX, que é a abreviação de Node Package Execute (executor de pacotes Node), permite que você execute qualquer pacote do npm sem precisar instalá-lo.</p><p>Você consegue baixar o npm em <a href="https://nodejs.org/en/download/" rel="noopener ugc nofollow">https://nodejs.org/en/download/</a>.</p><h2 id="como-escrever-seu-primeiro-programa-no-node-js-o-famoso-hello-world-"><strong>Como escrever seu primeiro programa no Node.js (o famoso "Hello World")</strong></h2><p>Crie um arquivo chamado hello_world.js na pasta do seu projeto</p><p>Em seguida, abra esse arquivo em um editor de código, como , por exemplo, o VS Code. Insira o código <code>console.log(“Hello World”);</code> nele e salve o arquivo.</p><p>Abra o seu terminal de comando e navegue até a pasta onde o arquivo está.</p><p>Agora, digite <code>node hello_world.js</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-5-1.png" class="kg-image" alt="image-5-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-5-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-5-1.png 715w" width="715" height="262" loading="lazy"></figure><h2 id="como-importar-os-m-dulos-essenciais-do-node"><strong>Como importar os módulos essenciais do Node</strong></h2><p>Então, vamos começar com um pacote bem básico, que é o <strong><strong>fs (sistema de arquivos)</strong></strong>. Você o usa para criar, ler e modificar arquivos.</p><p>Para importar o módulo <code>fs</code>, insira este comando no arquivo: <code>const fs = require(“fs”);</code>.</p><p>Agora, você pode usar qualquer função desse módulo. Para saber quais são, basta consultar a <a href="https://nodejs.org/docs/latest-v17.x/api/fs.html#file-system" rel="noopener ugc nofollow">documentação</a> (em inglês).</p><p>Por exemplo, para criar um arquivo, podemos usar a função <code>fs.writeFileSync(filename, content);</code>.</p><pre><code class="language-js">const fs = require(“fs”);
fs.writeFileSync(“file.txt”, “Hi there..”);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-9.png" class="kg-image" alt="image-9" width="223" height="66" loading="lazy"></figure><p>Para anexar qualquer coisa no mesmo arquivo, podemos fazer assim:</p><pre><code class="language-js">fs.appendFileSync(filename, content);.</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-10.png" class="kg-image" alt="image-10" width="421" height="78" loading="lazy"></figure><h2 id="como-instalar-pacotes-npm"><strong>Como instalar pacotes NPM</strong></h2><p>Como exemplo, vamos usar um pacote do npm muito simples, chamado <strong><strong>superheroes</strong></strong> (que é uma lista de super-heróis aleatórios) para ajudar você a entender como o npm funciona.</p><p>Para instalar qualquer pacote do npm, podemos usar este comando no terminal:</p><pre><code class="language-cmd">npm install superheroes</code></pre><p>Para importar o pacote que acabamos de instalar, digitamos isto no arquivo: <code>const sh = require(“superheroes”);</code>.</p><p>Usamos o comando abaixo para exibir o nome de um super-herói aleatório:</p><pre><code class="language-js">console.log(sh.random());.</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-11.png" class="kg-image" alt="image-11" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-11.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-11.png 731w" sizes="(min-width: 720px) 720px" width="731" height="261" loading="lazy"></figure><p>Vamos tentar outro pacote. Instalaremos um dos pacotes do npm mais usados, ​​chamado "<strong><strong>chalk</strong></strong>"<strong> <strong>—</strong></strong> ele estiliza strings de texto no terminal.</p><p>Para instalar o pacote <code>chalk</code> (utilizaremos a versão 2.4.2, pois ela permite importar o pacote usando o método <strong><strong>require</strong></strong>), digite este comando:</p><pre><code class="language-js">npm install chalk@2.4.2</code></pre><p>Agora, para estilizar uma string de texto, use este comando para escolher a cor da string (o nome da cor precisa estar em inglês):</p><pre><code class="language-js">chalk.cor(texto)

// Exemplo: chalk.blue("Este é o texto que ficará em azul.");</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-12.png" class="kg-image" alt="image-12" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-12.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-12.png 734w" sizes="(min-width: 720px) 720px" width="734" height="308" loading="lazy"></figure><p>Você pode ler mais sobre o pacote <code>chalk</code> <a href="https://www.npmjs.com/package/chalk">aqui</a> (texto em inglês).</p><h2 id="como-iniciar-o-npm-em-nosso-programa"><strong>Como iniciar o NPM em nosso programa</strong></h2><p>Iniciamos o NPM em nosso programa com:</p><pre><code class="language-js">npm init</code></pre><p>Em seguida, você pode responder às perguntas sobre informações do projeto, ou pressionar Enter em todas elas.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-13.png" class="kg-image" alt="image-13" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-13.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-13.png 897w" sizes="(min-width: 720px) 720px" width="897" height="828" loading="lazy"></figure><p>Se preferir usar diretamente o comando <code>npm init -y</code> (que é o mesmo que pressionar Enter para todas as perguntas).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-14.png" class="kg-image" alt="image-14" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-14.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-14.png 806w" sizes="(min-width: 720px) 720px" width="806" height="387" loading="lazy"></figure><p>Isso resultará na criação do arquivo <strong><strong>package.json</strong></strong>:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-15.png" class="kg-image" alt="image-15" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-15.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-15.png 775w" sizes="(min-width: 720px) 720px" width="775" height="428" loading="lazy"></figure><h3 id="o-que-faz-afinal-o-package-json"><strong>O que faz, afinal, o package.json?</strong></h3><p>O package.json é o coração de qualquer projeto do Node.js. É nele que temos o registro de todas as dependências (os pacotes do NPM) e os metadados de cada projeto.</p><p>Se outra pessoa baixar o projeto, este arquivo vai ajudá-lo a instalar todas as dependências necessárias para executar o programa.</p><h2 id="como-usar-o-moment-js-um-pacote-do-npm"><strong>Como usar o Moment.js — um pacote do NPM</strong></h2><p>A biblioteca Moment.js é um dos pacotes do npm mais usados do Node. Com ele, você pode analisar e validar datas.</p><p>Para instalar o pacote, execute este comando no terminal:</p><pre><code class="language-js">npm i moment</code></pre><p>Percebeu o comando <code>i</code>? Ele é a abreviação do <code>install</code> que usamos no início. Você pode usar qualquer um dos dois.</p><p>Importamos o pacote no nosso código:</p><pre><code class="language-js">const moment = require(“moment”);</code></pre><p>Criamos um objeto Date, buscando a data e hora atual (método nativo do JavaScript):</p><pre><code class="language-js">const time = new Date();</code></pre><p>Agora, para analisar ou formatar essa data, usaremos o pacote <strong><strong>moment:</strong></strong></p><pre><code class="language-js">const parsedTime = moment(time).format("h:mm:ss");</code></pre><p>Exibimos no console, então, o tempo analisado:</p><pre><code class="language-js">console.log(parsedTime);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-16.png" class="kg-image" alt="image-16" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-16.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-16.png 758w" sizes="(min-width: 720px) 720px" width="758" height="280" loading="lazy"></figure><p>Abaixo vemos o package.json do projeto, com todos os pacotes de dependências – neste caso, apenas o <strong><strong>moment</strong></strong> .</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-17.png" class="kg-image" alt="image-17" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-17.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-17.png 757w" sizes="(min-width: 720px) 720px" width="757" height="535" loading="lazy"></figure><p>Também temos a pasta <strong><strong>node_modules</strong></strong> na pasta do projeto. Essa pasta contém todas as dependências das quais nosso projeto depende, incluindo o <code>moment</code> e outros pacotes dos quais ele depende.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-18.png" class="kg-image" alt="image-18" width="227" height="98" loading="lazy"></figure><p>O <strong><strong>package-lock.json</strong></strong> é outro arquivo em nossa pasta do projeto que contém todas as informações sobre o nome, dependências, versão das dependências e se existe alguma versão que esteja bloqueada no projeto.</p><p>Ele descreve a árvore de dependências exata que foi gerada, permitindo que qualquer nova instalação tenha uma árvore idêntica.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-19.png" class="kg-image" alt="image-19" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-19.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/08/image-19.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-19.png 1400w" sizes="(min-width: 720px) 720px" width="1400" height="908" loading="lazy"></figure><h1 id="como-usar-o-express-js-um-framework-do-nodejs"><strong>Como usar o Express JS — um framework do NodeJS</strong></h1><p>O Express é um framework de aplicações para a web em Node.js, que oferece uma ampla variedade de funcionalidades para aplicações da web e dispositivos móveis.</p><h3 id="como-instalar-o-express"><strong>Como instalar o Express</strong></h3><p>Para instalar o Express, execute este comando:</p><pre><code class="language-js">npm install express</code></pre><p>Você precisará importar o Express no código do projeto, assim:</p><pre><code class="language-js">const express = require("express");</code></pre><h3 id="como-criar-uma-aplica-o-do-express"><strong>Como criar uma aplicação do Express</strong></h3><p>Para criar uma aplicação do Express, basta adicionar este código:</p><pre><code class="language-js">const app = express()</code></pre><h3 id="como-iniciar-um-servidor-na-porta-3000"><strong>Como iniciar um servidor na porta 3000</strong></h3><pre><code class="language-js">app.listen(3000, () =&gt; { 
    console.log("Server running on port 3000");
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-20.png" class="kg-image" alt="image-20" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-20.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-20.png 778w" sizes="(min-width: 720px) 720px" width="778" height="435" loading="lazy"></figure><p>Agora, você consegue acessar seu servidor em <a href="http://localhost:3000/" rel="noopener ugc nofollow"><strong><strong>http://localhost:3000</strong></strong></a><strong><strong>.</strong></strong></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-21.png" class="kg-image" alt="image-21" width="422" height="152" loading="lazy"></figure><p>"<em>Cannot GET /</em>", no entanto, significa que ainda não temos uma rota definida para "/".</p><p>Para definir a rota "/", usamos a função <code>app.get()</code>.</p><p>A função <strong><strong>app.get(rota, callback)</strong></strong> é usada para lidar com todas as solicitações GET.</p><p>O parâmetro <code>rota</code>, é autoexplicativo. É a rota que, quando chamada, executará uma função de callback, que é definida no segundo parâmetro.</p><p>Essa função de callback terá dois argumentos, <strong><strong>req</strong></strong> e <strong><strong>res</strong></strong>, que se referem à requisição HTTP e à resposta desejada, respectivamente. Os nomes dos argumentos (req, res) não são fixos. Você pode nomeá-los como quiser.</p><pre><code class="language-js">app.get("/", (req,res) =&gt; { 
    // app.get para lidar com solicitações GET
    // req - solicitação http, res - resposta desejada
    res.send("Hello World"); // envia um Hello World para essa rota
}</code></pre><h2 id="como-criar-um-programa-hello-world-no-express"><strong>Como criar um programa "Hello World" no Express</strong></h2><p>Nesta seção, criaremos o programa básico "Hello World", agora com o Express. Fica mais ou menos assim:</p><pre><code class="language-js">const express = require("express");
const app = express();
app.get("/", (req, res) =&gt; {  
    res.send("hello world");
});
app.listen(3000, () =&gt; {  
    console.log("Server running on 3000");
});</code></pre><p>E aqui está a exibição dele no navegador:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-22.png" class="kg-image" alt="image-22" width="530" height="85" loading="lazy"></figure><h2 id="como-renderizar-arquivos-est-ticos-no-express"><strong>Como renderizar arquivos estáticos no Express</strong></h2><p>Aprenderemos agora o conceito de renderização de arquivo estático usando o Express.</p><p>Primeiro, crie uma nova pasta para o projeto. Inicialize o npm usando o comando <code>npm init -y</code>.</p><p>Instale o pacote Express com <code>npm i express</code> e crie um arquivo chamado <code>app.js</code>.</p><p>Em seguida, crie uma aplicação que escute (inicie) o servidor na porta 3000, deste modo:</p><pre><code class="language-js">const express = require("express);
const app = express();
app.listen(3000, () =&gt; {  
    console.log("Server running on 3000");
}</code></pre><p>Para renderizar páginas estáticas, com HTML, CSS e JS, no diretório raiz do projeto, crie uma pasta chamada <code>public</code>.</p><p>Como estamos focando apenas no back-end, não gastaremos muito tempo no front-end e criaremos apenas um arquivo HTML simples na pasta <code>public</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-23.png" class="kg-image" alt="image-23" width="571" height="381" loading="lazy"></figure><p>Agora, importaremos o módulo <strong><strong>path</strong></strong> e juntaremos todos os caminhos que especificamos em um só:</p><pre><code class="language-js">const path = require("path");</code></pre><p>Para renderizar esses arquivos, precisamos usar o seguinte comando:</p><pre><code class="language-js">app.use(express.static(path.join(__dirname, "/public")));</code></pre><p><strong><strong>__dirname →</strong></strong> retorna o diretório atual</p><pre><code class="language-js">const express = require("express");
const path = require("path");
const app = new express();
app.use(express.static(path.join(__dirname, "/public")));
app.listen(3000, () =&gt; {  
    console.log("Server running on 3000");
});</code></pre><p>E aqui está a saída no navegador:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-24.png" class="kg-image" alt="image-24" width="517" height="210" loading="lazy"></figure><h2 id="como-renderizar-arquivos-din-micos-no-express"><strong>Como renderizar arquivos dinâmicos no Express</strong></h2><p>Nesta seção, aprenderemos a renderizar arquivos dinâmicos nos quais podemos usar valores de um objeto como entrada.</p><p>Para renderizar páginas dinâmicas, existem muitos modelos (em inglês, <em>templates</em>), como o <code>pug</code>, <code>handlebars</code>, <code>ejs</code>, dentre outros. Esses modelos nos permitem injetar dados dinâmicos, com condições e laços, em tempo de execução.</p><p>Aqui, vamos nos concentrar no <code>handlebars</code>.</p><p>Para dar uma breve introdução ao <code>handlebars</code> (cuja tradução em português seria algo como "guidão" ou "guia"), ele utiliza um modelo (<em>template</em>) e um objeto de entrada para gerar o nosso HTML.</p><p>Uma expressão do <code>handlebar</code> começa com duas chaves iniciais, <code>{{</code>, algum conteúdo, e termina com duas chaves finais, <code>}}</code>. Quando esse modelo é executado, essas expressões são substituídas pelos valores do objeto de entrada. Sua sintaxe fica assim:</p><pre><code class="language-js">&lt;p&gt;{{nome}} {{sobrenome}}&lt;/p&gt;</code></pre><p>Mas antes de escrevê-lo, instale os pacotes <code>hbs</code> e <code>express</code>:</p><pre><code class="language-js">npm i hbs express</code></pre><p>Percebeu que os dois pacotes foram instalados no mesmo comando? Essa é outra possibilidade do NPM, em que você pode, em um mesmo comando, instalar vários pacotes encadeando seus nomes com um espaço entre eles.</p><p>Agora, crie um arquivo chamado <code>app.js</code> e importe os pacotes:</p><pre><code class="language-js">const express = require(“express”);
const hbs = require(“hbs”);
const path = require(“path”);</code></pre><p>Crie uma aplicação do Express e escute-a na porta 3000:</p><pre><code class="language-js">const app = express();
app.listen(3000, (req,res) =&gt; {  
    console.log("Server running on 3000");
}</code></pre><p>Para que o <code>handlebars</code> funcione, precisamos definir o mecanismo de visualização como sendo o <strong><strong>hbs</strong></strong>.</p><pre><code class="language-js">app.set("view engine", "hbs");</code></pre><p>É ele quem nos permite renderizar páginas dinamicamente usando o modelo especificado.</p><p>O mecanismo de visualização (em inglês, <em>view engine</em>) geralmente procurará a pasta "views" na pasta raiz. Para evitar erros, vamos deixar explícito o caminho de "views" usando este código:</p><pre><code class="language-js">app.set("views", path.join(__dirname,"/views");</code></pre><p>Agora, crie uma pasta <strong><strong>views</strong></strong> no diretório raiz. Nela, crie um arquivo chamado <code>index.hbs</code> (.hbs é a extensão do <code>handlebars</code>) e insira o código HTML a seguir:</p><h3 id="index-hbs"><strong>index.hbs</strong></h3><pre><code class="language-html">&lt;html&gt;  
    &lt;head&gt; 
        &lt;title&gt;Dynamic Rendering&lt;/title&gt; 
    &lt;/head&gt;
    &lt;body&gt;  
      &lt;h1&gt;Dynamic Rendering&lt;/h1&gt;   
      &lt;p&gt;{{autor}}&lt;/p&gt; &lt;!--dados dinâmicos recebidos do servidor--&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre><p><strong><strong><code>{{autor}}</code> </strong></strong>— será a sintaxe para inserir nossos dados dinâmicos</p><p>Agora, para renderizar o arquivo <code>index.hbs</code>, criaremos uma função <code>app.get</code> para manipular a solicitação GET na rota "/" e enviar os dados dinâmicos para <code>autor</code>.</p><pre><code class="language-js">app.get("/", (req, res) =&gt; { 
    res.render("index", {    
        autor: "Arash Arora", 
    });
});</code></pre><p><strong><strong><code>res.render</code></strong></strong> é o método para renderizar a nossa visualização. Temos que passar dois argumentos. O primeiro é o nome do arquivo sem a extensão e o segundo é o objeto de variáveis ​​locais, que, no nosso caso, é a variável <strong><strong>autor</strong></strong>.</p><p>Nosso arquivo <strong><strong>app.js</strong></strong> terá esta aparência:</p><pre><code class="language-js">const express = require("express");
const hbs = require("hbs");
const path = require("path");
const app = express();
app.set("view engine", "hbs");
app.set("views", path.join(__dirname, "/views"));
app.get("/", (req, res) =&gt; {  
    res.render("index", {    
        author: "Arash Arora", 
    });
});
app.listen(3000, (req, res) =&gt; { 
    console.log("Server listening on 3000");
});</code></pre><p>A estrutura das nossas pastas é esta:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-25.png" class="kg-image" alt="image-25" width="251" height="232" loading="lazy"></figure><p>E aqui está o resultado:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-26.png" class="kg-image" alt="image-26" width="412" height="208" loading="lazy"></figure><h1 id="como-criar-modelos-avan-ados-com-o-handlebars"><strong>Como criar modelos avançados com o handlebars</strong></h1><p>Então, é aqui que aprenderemos sobre componentes reutilizáveis. Anteriormente, tínhamos que construir componentes idênticos em cada página (como os componentes de cabeçalho e rodapé).</p><p>Como são tarefas muito repetitivas, o modelo (<em>template</em>) avançado nos salvará dessa tarefa. Conceitualmente, faremos apenas um componente que será usado em todos os lugares que precisarmos.</p><h3 id="introduzindo-o-conceito-de-partials-no-handlebars"><strong>Introduzindo o conceito de partials no handlebars</strong></h3><p>As parciais (ou <em>partials</em>) são os arquivos do handlebars normais que outros modelos podem chamar neles. As <strong>p<strong>artials</strong></strong> são um conceito de modelagem amplamente utilizado, não específico do <code>handlebars</code>.</p><p>Para construir modelos que, provavelmente, serão reutilizados, você pode isolá-los em seus próprios arquivos (as parciais) e usá-los em vários modelos. Você pode considerá-lo como sendo uma técnica simples para modularizar seus modelos.</p><p>Estas são as etapas para criá-los:</p><ul><li>Iniciar o npm →<code>npm init -y</code></li><li>Instalar os pacotes necessários, express e hbs →<code>npm i express hbs</code></li><li>Criar a pasta de modelos: <strong><strong>templates</strong></strong></li><li>Criar duas pastas adicionais dentro da pasta de modelos: <strong><strong>partiais e views</strong></strong></li><li>E criar um arquivo <strong><strong>app.js</strong></strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-27.png" class="kg-image" alt="image-27" width="236" height="264" loading="lazy"><figcaption>A estrutura de pastas deve ser semelhante a esta</figcaption></figure><p>Agora, vamos criar dois arquivos de parciais: header.hbs e footer.hbs. Adicionaremos outras duas visualizações, index.hbs e about.hbs.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-28.png" class="kg-image" alt="image-28" width="211" height="228" loading="lazy"></figure><h3 id="index-hbs-1"><strong>index.hbs</strong></h3><pre><code class="language-html">&lt;html lang="en"&gt;  
    &lt;head&gt;   
        &lt;title&gt;Advanced Templating&lt;/title&gt;  
    &lt;/head&gt;  
    &lt;body&gt;    
        {{&gt;header}} &lt;!--inclui o componente "header"--&gt;
        &lt;p&gt;I'm a savior&lt;/p&gt;    
        {{&gt;footer}} &lt;!-- inclui o componente "footer"--&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre><h3 id="about-hbs"><strong>about.hbs</strong></h3><pre><code class="language-html">&lt;html lang="en"&gt;  
    &lt;head&gt;    
        &lt;title&gt;Advanced Templating -- About&lt;/title&gt; 
    &lt;/head&gt;
    &lt;body&gt;   
        {{&gt;header}}   
        &lt;p&gt;Handlebars&lt;/p&gt;    
        {{&gt;footer}} 
    &lt;/body&gt;
&lt;/html&gt;</code></pre><h3 id="header-hbs"><strong>header.hbs</strong></h3><pre><code class="language-html">&lt;header&gt;  
    &lt;h1&gt;Advanced Templating&lt;/h1&gt; 
    &lt;h3&gt;{{title}}&lt;/h3&gt;&lt;!--dados dinâmicos recebidos do servidor--&gt;
    &lt;a href="/"&gt;Home&lt;/a&gt; 
    &lt;a href="/about"&gt;About&lt;/a&gt;
&lt;/header&gt;</code></pre><h3 id="footer-hbs"><strong>footer.hbs</strong></h3><pre><code class="language-html">&lt;footer&gt;  
    &lt;p&gt;Created by {{name}}&lt;/p&gt; &lt;!--name -&gt; dynamic data --&gt;
&lt;/footer&gt;</code></pre><h3 id="app-js"><strong>app.js</strong></h3><pre><code class="language-javascript">const express = require("express");
const hbs = require("hbs");
const path = require("path");
const app = express();
app.set("view engine", "hbs");
app.set("views", path.join(__dirname, "/templates/views"));
hbs.registerPartials(path.join(__dirname, "/templates/partials"));
app.get("/", (req, res) =&gt; {  
    res.render("index", {    
        title: "Home",    
        name: "Arash Arora",  
    });
});
app.get("/about", (req, res) =&gt; {  
    res.render("about", {    
        title: "About",    
        name: "Arash Arora",  
    });
});
app.listen(3000, () =&gt; {  
    console.log("Listening on port 3000");
});</code></pre><p>É a mesma coisa que expliquei na seção de renderização de arquivos dinâmicos no Express – exceto que, aqui, temos que <strong><strong>registrar </strong>a<strong>s parciais</strong></strong> para usá-las.</p><h3 id="como-cadastrar-parciais"><strong>Como cadastrar parciais</strong></h3><pre><code class="language-js">hbs.registerPartials(path_to_partials)</code></pre><p>Como criamos o diretório das nossas parciais na pasta <em>templates</em>, o caminho deles fica assim:</p><pre><code class="language-js">hbs.registerPartials(path.join(__dirname, "/templates/partials"));</code></pre><h1 id="concluindo"><strong>Concluindo</strong></h1><p>Neste artigo, aprendemos sobre o Node.js, da teoria à prática. Embora o Node.js seja um tópico muito amplo, que não conseguimos aprender em um único artigo curto como este, busquei cobrir alguns dos recursos essenciais para ajudar você a começar sua jornada nele.</p><p>Em poucas palavras, falamos o que é o Node.js, o que é o JavaScript em tempo de execução, não bloqueante e orientado a eventos, assíncrono e usando uma única thread para realizar operações. Também abordamos o framework mais utilizado em Node.js para aplicações da web, que é o Express, juntamente com uma demonstração pequena e flexível do que ele faz.</p><p>Falamos também sobre NPM, NPX e renderização de dados estáticos e dinâmicos do Node.js.</p><p>Em resumo, o Node.js é uma tecnologia incrível e que vale a pena conhecer. As possibilidades dele são infinitas devido à sua grande comunidade.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Padrão de projeto Singleton – como ele funciona em JavaScript, com código de exemplo ]]>
                </title>
                <description>
                    <![CDATA[ Em algum momento, você vai precisar utilizar o estado global nas suas aplicações em React. Ele permite que você tenha todos os dados em um só lugar e faz com que os componentes necessários possam acessá-los facilmente. Para ajudá-lo a fazer isso, você geralmente usará algum tipo de biblioteca de ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/padrao-de-projeto-singleton-como-ele-funciona-em-javascript-com-codigo-de-exemplo/</link>
                <guid isPermaLink="false">62dcbca8fea2f10707d6736c</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Wed, 24 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/sven-mieke-fteR0e2BzKo-unsplash-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/singleton-design-pattern-with-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Singleton Design Pattern – How it Works in JavaScript with Example Code</a>
      </p><p>Em algum momento, você vai precisar utilizar o estado global nas suas aplicações em React. Ele permite que você tenha todos os dados em um só lugar e faz com que os componentes necessários possam acessá-los facilmente.</p><p>Para ajudá-lo a fazer isso, você geralmente usará algum tipo de biblioteca de gerenciamento de estado, como o Redux, React Context ou o Recoil.</p><p>Neste artigo, porém, vamos aprender sobre o gerenciamento do estado global com a ajuda de padrões de projeto.</p><p>Veremos o que são padrões de projeto e nos concentraremos especificamente no padrão de projeto <em>Singleton</em>. No final, veremos um exemplo prático desse padrão, juntamente com suas vantagens e desvantagens.</p><p>Então, sem mais delongas, vamos começar!</p><h2 id="sum-rio"><strong>Sumário</strong></h2><ul><li><a href="https://www.freecodecamp.org/news/singleton-design-pattern-with-javascript/#prerequisites">Pré-requisitos</a></li><li><a href="https://www.freecodecamp.org/news/singleton-design-pattern-with-javascript/#what-is-a-design-pattern">O que é um padrão de projeto</a>?</li><li><a href="https://www.freecodecamp.org/news/singleton-design-pattern-with-javascript/#what-is-the-singleton-design-pattern">O que é o padrão de projeto Singleton</a>?</li><li><a href="https://www.freecodecamp.org/news/singleton-design-pattern-with-javascript/#pros-and-cons-of-the-singleton-design-pattern">Prós e contras do padrão de projeto Singleton</a></li><li><a href="https://www.freecodecamp.org/news/singleton-design-pattern-with-javascript/#summary">Resumo</a></li></ul><h2 id="pr-requisitos"><strong>Pré-requisitos</strong></h2><p>Antes de passar por este artigo, eu recomendo você estar familiarizado com o conteúdo dos seguintes artigos:</p><ul><li><a href="https://www.freecodecamp.org/news/javascript-classes-how-they-work-with-use-case/">O que são classes em JavaScript</a>?</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction#accessing_the_dom">Como acessar elementos do DOM</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze">Como funciona o congelamento de objetos</a></li></ul><h2 id="o-que-um-padr-o-de-projeto"><strong>O que é um padrão de projeto?</strong><br></h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/ezgif.com-gif-maker--9-.gif" class="kg-image" alt="ezgif.com-gif-maker--9-" width="1080" height="608" loading="lazy"><figcaption>Padrões de projeto fornecem soluções conceituais para problemas comuns</figcaption></figure><p>Um padrão de projeto é um conjunto generalizado de instruções que solucionam problemas comuns no projeto de um software.</p><p>Você pode pensar em padrões de projeto como um site que reúne vários <em>templates</em> de projeto, e que você pode usar cada um deles para ajudar a criar o seu site, baseado nas necessidades específicas dele.</p><p>Por isso, a pergunta agora é – por que é importante conhecer os padrões de projeto? Bem, usar os padrões de projeto nos dá vários benefícios, como:</p><ul><li>Eles são padrões comprovados – ou seja, essas instruções foram testadas muitas e muitas vezes e refletem a experiência e conhecimento de muitos desenvolvedores.</li><li>São padrões que você pode reutilizar facilmente.</li><li>Eles são altamente expressivos.</li></ul><p>Observe que um padrão de projeto fornece apenas uma solução conceitual para um problema recorrente, de modo otimizado. Ele não é um trecho de código que você pode simplesmente copiar e colar no seu projeto.</p><p>Agora que sabemos o que são padrões de projeto, vamos mergulhar de cabeça em nosso primeiro padrão de projeto.</p><h2 id="o-que-o-padr-o-de-projeto-singleton"><strong>O que é o padrão de projeto Singleton?</strong><br></h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/singleton-def-gif.gif" class="kg-image" alt="singleton-def-gif" width="1080" height="608" loading="lazy"><figcaption>O padrão de projeto Singleton expõe uma única instância que pode ser usada por vários componentes</figcaption></figure><p>Singleton é um padrão de projeto que nos diz que podemos criar apenas uma instância de uma classe e essa instância pode ser acessada globalmente (e não somente por um componente).</p><p>Ele é um dos tipos básicos de padrão de projeto, pois garante que a classe atue como a única fonte de entrada para todos os componentes consumidores que desejam acessar esse estado. Em outras palavras, ele fornece um ponto de entrada comum para usar o estado global.</p><p>Portanto, uma classe Singleton deve ser aquela que:</p><ul><li>Garanta que haja apenas uma instância da classe</li><li>Forneça um ponto de acesso global ao estado</li><li>Garanta que a instância seja criada apenas uma única vez</li></ul><h3 id="exemplo-do-padr-o-de-projeto-singleton"><strong>Exemplo do padrão de projeto Singleton</strong></h3><p>Para entender melhor esse conceito, vejamos um exemplo. Esta será uma aplicação em React simples, que demonstrará como o valor do estado global é usado nos componentes, como fazemos para alterá-lo e como ele é atualizado em todos os componentes. Vamos começar.</p><p>Antes de começarmos com a implementação real, vamos dar uma olhadinha na estrutura de pastas e arquivos do nosso projeto:</p><figure class="kg-card kg-code-card"><pre><code>.
├── index.html
├── package.json
└── src
    ├── componentA.js
    ├── componentB.js
    ├── globalStyles.js
    ├── index.js
    ├── styles.css
    └── utilities.js</code></pre><figcaption>Estrutura de pastas do projeto</figcaption></figure><p>Estes são os detalhes de cada arquivo:</p><ul><li><code>componentA.js</code> é um componente consumidor que usa a classe Singleton para acessar o objeto de estado global e manipulá-lo.</li><li><code>componentB.js</code> é semelhante ao componente anterior, pois precisará acessar o objeto de estado global e também pode manipulá-lo.</li><li><code>globalStyles.js</code> é um módulo que consiste na classe Singleton e que exporta a instância dessa classe.</li><li><code>index.js</code> é responsável por gerenciar as operações globais do JS, ou seja, as alterações do JavaScript necessárias para outros elementos do DOM.</li><li><code>styles.css</code> gerencia o estilo da aplicação. É um CSS básico.</li><li><code>utilities.js</code> é um módulo que exporta algumas funções utilitárias.</li><li><code>index.html</code> consiste no código HTML para os componentes que são necessários no projeto.</li><li><code>package.json</code> é uma configuração padrão feita pelo comando <code>npm init</code>.</li></ul><p>Agora que sabemos o que cada arquivo faz, podemos começar a implementá-los um a um.</p><p>Antes de fazer isso, contudo, precisamos entender o fluxo do código. O objetivo do nosso exemplo é construir uma aplicação em JavaScript que demonstre como o estilo global <code>color</code> é consumido por cada um dos componentes e como cada componente o altera.</p><p>Cada componente tem um <code>color-picker</code>(seletor de cor). Quando você altera a propriedade global <code>color</code> do estilo por meio do seletor de cores presente dentro de cada componente, a cor aparece automaticamente em outros componentes e no estado global.</p><p>Primeiro, vamos criar o arquivo <code>index.html</code>. Cole o seguinte código no arquivo:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Parcel Sandbox&lt;/title&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;link rel="stylesheet" href="./src/styles.css" /&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class="global-state"&gt;
      &lt;h3&gt;Global State&lt;/h3&gt;
      &lt;h4&gt;Color&lt;/h4&gt;
      &lt;span id="selected-color"&gt;&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class="contents"&gt;
      &lt;div class="component-a"&gt;
        &lt;strong&gt;Component A&lt;/strong&gt;
        &lt;div&gt;Pick color&lt;/div&gt;
        &lt;span id="selected-color"&gt;black&lt;/span&gt;
        &lt;input type="color" id="color-picker-a" /&gt;
      &lt;/div&gt;
      &lt;div class="component-b"&gt;
        &lt;strong&gt;Component B&lt;/strong&gt;
        &lt;div&gt;Pick color&lt;/div&gt;
        &lt;span id="selected-color"&gt;black&lt;/span&gt;
        &lt;input type="color" id="color-picker-b" /&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;script src="src/index.js"&gt;&lt;/script&gt;
    &lt;script src="src/componentA.js"&gt;&lt;/script&gt;
    &lt;script src="src/componentB.js"&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Na parte superior, carregamos nosso CSS via <code>&lt;link rel="stylesheet" href="./src/styles.css" /&gt;</code>.</p><p>Em seguida, dividimos nossa aplicação em duas partes por meio de duas classes:</p><ul><li><code>.global-state</code>: que representará o código HTML para mostrar o estado global atual da aplicação.</li><li><code>.contents</code>: que representará o código HTML que são os dois componentes.</li></ul><p>Cada um dos componentes (<code>component-a</code> e <code>component-b</code>) tem um elemento input (entrada) do tipo seletor de cor.</p><p>Ambos os componentes possuem um elemento <code>span</code> com a classe <code>selected-color</code>, que ajudará a exibir o valor atual da variável de estado global <code>color</code>.</p><p>Como você pode ver, quando se muda o valor do seletor de cores dentro do <code>componentA</code>, também mudam junto:</p><ul><li>O texto dentro do elemento <code>span</code> com a classe <code>.selected-color</code>, que fica dentro do <code>componentB</code> e do estado global.</li><li>O valor dos seletores de cores de <code>componentA</code> e <code>componentB</code>.</li></ul><p>Depois, veremos como todos esses valores estão mudando. Por enquanto, é importante entendermos que, se alterarmos o valor do estado global de um componente, as classes Singleton garantirão que o valor da instância seja atualizado e que todos os componentes que a estiverem consumindo obterão o mesmo valor, pois fazem referência à mesma instância.</p><p>Em seguida, crie o arquivo <code>globalStyles.js</code>. Copie o código abaixo e cole nele:</p><pre><code class="language-javascript">let instance;
let globalState = {
  color: ""
};

class StateUtility {
  constructor() {
    if (instance) {
      throw new Error("New instance cannot be created!!");
    }

    instance = this;
  }

  getPropertyByName(propertyName) {
    return globalState[propertyName];
  }

  setPropertyValue(propertyName, propertyValue) {
    globalState[propertyName] = propertyValue;
  }
}

let stateUtilityInstance = Object.freeze(new StateUtility());

export default stateUtilityInstance;
</code></pre><p>O trecho de código acima é um módulo que possui uma classe Singleton <code>StateUtility</code> e exporta por padrão a instância da mesma classe.</p><p>Vamos olhar com mais detalhes essa classe <code>StateUtility</code> para entender como ela se torna uma classe Singleton:</p><ul><li>Ela tem um <code>constructor</code> e dois métodos de classe, chamados <code>getPropertyByName</code> e <code>setPropertyValue</code>. Ambos os métodos de classe são autoexplicativos: um obtém o valor da propriedade e o outro define seu valor.</li><li>Em seguida, temos a função <code>constructor</code>. Ela é uma função que é invocada sempre que criamos um novo objeto dessa classe.</li><li>Aqui temos um problema: para uma classe ser uma classe Singleton, precisamos nos certificar de que ela crie apenas uma instância de si, e nada mais.</li><li>Para garantir que isso aconteça, simplesmente criamos uma variável global chamada <code>instance</code> no topo do módulo. Essa variável atuará como um verificador. Adicionamos também uma condição na função <code>constructor</code> de modo que, se a variável <code>instance</code> tiver qualquer valor (ou seja, um objeto da classe <code>StateUtility</code>), ela enviará um erro. Caso não tenha um valor, então atribuirá à variável <code>instance</code> a instância da classe atual (o objeto <code>this</code>).</li><li>Aqui, implementamos a classe <code>StateUtility</code> para que ela possa expor e alterar a variável <code>globalState</code>.</li><li>Garantimos, também, que não estamos expondo <code>globalState</code> diretamente, mas usando os métodos de classe <code>StateUtility</code>. Deste modo, protegemos o estado global de ser alterado diretamente.</li><li>Por fim, criamos a instância da classe assim: <code>let stateUtilityInstance = Object.freeze(new StateUtility());</code>.</li><li>Usamos também o método <code>Object.freeze</code> para que nenhuma outra classe/componente/módulo seja capaz de modificar nossa instância <code>stateUtilityInstance</code>.</li></ul><p>Agora, crie um arquivo chamado <code>componentA.js</code> dentro da pasta <code>src</code>. Copie e cole o código abaixo no arquivo:</p><pre><code class="language-javascript">import {
    setAllSelectedColor
} from "./utilities";
import globalStyle from "./globalStyles";

// Obter os elementos do DOM respectivos
const selectedColor = document.querySelectorAll("#selected-color");
const colorPickerA = document.getElementById("color-picker-a");
const colorPickerB = document.getElementById("color-picker-b");

// Manipulador de evento para quando um evento de mudança ocorrer
colorPickerA.onchange = (event) =&gt; {
	// Define a propriedade color do state global com a cor equivalente ao valor atual do seletor de cor;
    globalStyle.setPropertyValue("color", event.target.value);
    const color = globalStyle.getPropertyByName("color");

    // Uma função que define o valor de todos os elementos do DOM #selection-color;
    setValueOfSimilarElements(selectedColor, color);

    // Certificar-se de definir que o valor do seletor de cor do componente B esteja definido como sendo igual ao valor do seletor de cor de A;
    // Isso é feito para garantir que os dois seletores de cor tenham o mesmo valor no momento da mudança;
    colorPickerB.value = color;
};</code></pre><p>Aqui estão os detalhes do código acima:</p><!--kg-card-begin: markdown--><ul>
<li>O objetivo desse código é garantir que anexamos o manipulador <code>onChange</code> no seletor de cores, que está presente dentro do arquivo <code>component-a</code>. Nesse caso, o seletor de cores do componentA é identificado pela id: <code>#color-picker-a</code>.</li>
<li>Precisamos ter certeza de que esse manipulador:
<ol>
<li>Defina o valor da propriedade color do globalState.</li>
<li>Busque a mesma propriedade novamente.</li>
<li>Aplique o mesmo valor a diferentes áreas do DOM.</li>
<li>Também garanta que definimos o valor do outro seletor de cores com o estado global.</li>
</ol>
</li>
</ul>
<!--kg-card-end: markdown--><p>Agora, vamos dar uma olhada em todos esses passos um a um:</p><ul><li>Primeiro, vamos buscar todos os elementos DOM necessários.</li><li>O que estamos planejando aqui é atualizar todos os seletores de cores e elementos <code>span</code> com o id <code>#selected-color</code> com o valor atual da propriedade <code>color</code> do <code>globalState</code> sempre que o evento <code>onchange</code> ocorrer.</li><li>No caso do <code>componentA</code>, uma vez que alteramos a cor pelo seletor de cores, precisamos atualizar o mesmo valor em 2 elementos <code>span</code> (<code>#selected-color</code>) – ou seja, um elemento <code>span</code> de <code>componentB</code> e um elemento <code>span</code> na <code>div</code> do container da classe <code>.global-state</code>.</li><li>Fazemos isso porque queremos manter todos os componentes sincronizados e demonstrar que o valor do estado global permanece o mesmo em todos os componentes.</li><li>Então, atualizamos a propriedade <code>color</code> do estado global usando o método <code>setPropertyValue</code> da classe <code>StateUtility</code>. Passamos para ele o <code>event.target.value</code> que contém o valor atual do seletor de cores que está dentro do input <code>#color-picker-a</code>.</li><li>Uma vez que o valor está definido, buscamos a mesma propriedade novamente usando <code>getPropertyByName</code>. Fazemos isso para demonstrar que a propriedade <code>color</code> do estado global foi atualizada e está pronta para ser usada.</li><li>Em seguida, usamos a função utilitária <code>setValueOfSimilarElements</code> para atualizar todos os elementos que possuem o mesmo nome de classe/id com algum valor. Nesse caso, atualizamos todos os elementos <code>#selected-color</code> com o valor <code>color</code>.</li><li>Por fim, atualizamos o valor do outro seletor de cores, que é o seletor de cores <code>#color-picker-b</code> do <code>componentB</code>,</li></ul><p>Fazemos a mesma coisa para o <code>componentB</code>. Criamos o arquivo <code>componentB.js</code> e o atualizamos com este código:</p><pre><code class="language-javascript">import {
    setValueOfSimilarElements
} from "./utilities";
import globalStyle from "./globalStyles";

// Obter os elementos do DOM respectivos
const selectedColor = document.querySelectorAll("#selected-color");
const colorPickerA = document.getElementById("color-picker-a");
const colorPickerB = document.getElementById("color-picker-b");

/**
 * Manipulador de evento para quando um evento de mudança ocorrer
 */
colorPickerB.onchange = (event) =&gt; {
    // Define a propriedade color do state global com a cor equivalente ao valor atual do seletor de cor
    globalStyle.setPropertyValue("color", event.target.value);

    const color = globalStyle.getPropertyByName("color");

    // Uma função que define o valor de todos os elementos do DOM #selection-color;
    setValueOfSimilarElements(selectedColor, color);

    // Certificar-se de definir que o valor do seletor de cor do componente A esteja definido como sendo igual ao valor do seletor de cor de B;
    // Isso é feito para garantir que os dois seletores de cor tenham o mesmo valor no momento da mudança;
    colorPickerA.value = color;
};</code></pre><p>Fazemos a mesma coisa que fizemos dentro do arquivo do <code>componentA</code>. Nesse caso , porém, atualizamos o valor do seletor de cores presente dentro do <code>componentA</code> (ou seja, atualizamos o valor do elemento <code>#color-picker-a</code>).</p><p>Veja como ficará nossa aplicação:</p><p><a href="https://www.canva.com/design/DAFGQsDz_cU/">https://www.canva.com/design/DAFGQsDz_cU/</a></p><p><a href="https://zqbo69.csb.app/">Segue o link do código completo</a>:</p><figure class="kg-card kg-embed-card"><iframe width="1280" height="500" src="https://codesandbox.io/embed/singleton-js-example-zqbo69?from-embed" style="width:1280px; height:500px; border:0; border-radius: 4px; overflow:hidden;" sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin" title="Conteúdo incorporado" loading="lazy"></iframe></figure><h2 id="pr-s-e-contras-do-padr-o-de-projeto-singleton"><strong>Prós e contras do padrão de projeto Singleton</strong></h2><p>Aqui estão algumas das vantagens de se usar o padrão de projeto Singleton:</p><ul><li>Ele garante que apenas uma única instância da classe seja criada.</li><li>Obtemos um único ponto de acesso para a instância que pode ser acessada globalmente.</li></ul><p>Aqui estão algumas desvantagens do padrão de projeto Singleton:</p><ul><li>Ele viola o princípio de responsabilidade única, pois está tentando resolver dois problemas ao mesmo tempo. Ele tenta resolver os seguintes problemas: G<em><em>arantir que uma classe tenha apenas uma instância</em></em> e <em><em>atribuir um ponto </em>único <em>de acesso global à instância da classe </em>S<em>ingleton.</em></em></li><li>É difícil escrever casos de testes unitários para classes Singleton. Isso ocorre porque a ordem de execução pode alterar o valor presente no estado global. Portanto, a ordem de execução é importante.</li><li>Ao escrever testes unitários, existe o risco de outro componente ou módulo estar alterando o valor/instância do estado global. Em tais cenários, torna-se difícil depurar o erro.</li></ul><h2 id="resumo"><strong>Resumo</strong></h2><p>O padrão de projeto Singleton é útil na criação de um estado global que possa ser acessado por qualquer componente.</p><p>Então, falando brevemente sobre o padrão Singleton:</p><ul><li>É um padrão que restringe a classe a criar apenas uma instância dela mesma.</li><li>O padrão Singleton pode ser considerado a base das bibliotecas de gerenciamento de estado global, como o Redux ou o React Context.</li><li>Ele pode ser acessado ​​globalmente e atua como um único ponto de acesso para acessar o estado global.</li></ul><p>Isso é tudo, pessoal. Obrigado pela leitura!</p><p>Siga o autor no <a href="https://twitter.com/keurplkar">Twitter</a> , no <a href="https://github.com/keyurparalkar">GitHub</a> e no <a href="https://www.linkedin.com/in/keyur-paralkar-494415107/">LinkedIn</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Pesquisa binária em Python – Como escrever o algoritmo de pesquisa binária e exemplos ]]>
                </title>
                <description>
                    <![CDATA[ Diariamente, estamos procurando por informações ou tentando encontrar soluções para os problemas que encontramos. Ao percorrer os resultados de uma pesquisa na web, escolhemos os artigos ou recursos mais relevantes que acreditamos que nos ajudarão a encontrar a resposta. Pesquisar faz parte de nossas vidas, pois nem sempre podemos ter ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/pesquisa-binaria-em-python-como-escrever-o-algoritmo-de-pesquisa-binaria-e-exemplos/</link>
                <guid isPermaLink="false">62dc7426fea2f10707d67108</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Tue, 23 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/pexels-pixabay-277593-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/binary-search-in-python-with-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Binary Search in Python – How to Code the Algorithm with Examples</a>
      </p><p>Diariamente, estamos procurando por informações ou tentando encontrar soluções para os problemas que encontramos.</p><p>Ao percorrer os resultados de uma pesquisa na web, escolhemos os artigos ou recursos mais relevantes que acreditamos que nos ajudarão a encontrar a resposta.</p><p>Pesquisar faz parte de nossas vidas, pois nem sempre podemos ter as respostas. Do mesmo modo, existem vários algoritmos que ajudam os programas a serem executados de modo mais eficiente e a lidar com os dados de maneira mais eficaz.</p><h2 id="o-que-abordaremos-neste-tutorial"><strong>O que abordaremos neste tutorial</strong></h2><ul><li>O que é um algoritmo de pesquisa?</li><li>O que é um algoritmo de pesquisa binária?</li><li>Como funciona a pesquisa binária – Dividir e conquistar</li><li>Processos envolvidos em algoritmos de pesquisa binária</li><li>Métodos usados ​​em algoritmos de pesquisa binária</li><li>Exemplos reais de pesquisa binária</li></ul><h2 id="o-que-um-algoritmo-de-pesquisa"><strong>O que é um algoritmo de pesquisa?</strong></h2><p>Um algoritmo de pesquisa trabalha para recuperar itens de qualquer estrutura de dados. Ele compara os dados que são inseridos na entrada com as informações armazenadas no banco de dados e traz o resultado. Um exemplo é encontrar o número de telefone do seu melhor amigo na sua lista de contatos com 1.000 números.</p><p>Existem diferentes tipos de algoritmos de pesquisa. Vejamos alguns deles:</p><h3 id="algoritmos-de-pesquisa-linear"><strong>Algoritmos de pesquisa linear</strong></h3><p>Os algoritmos de pesquisa linear são os mais simples de todos os algoritmos de pesquisa. Como o nome indica, eles operam em uma sequência (de modo linear).</p><p>A pesquisa linear verifica os elementos em uma lista, um após o outro, para localizar o item que corresponda ao valor específico. Quando encontra um item que corresponda à procura, o algoritmo retorna a posição desse item.</p><h3 id="algoritmo-de-dijkstra"><strong>Algoritmo de Dijkstra</strong></h3><p>O algoritmo do caminho mais curto de Dijkstra é mais usado em pesquisas avançadas. O algoritmo de Dijkstra mapeia a distância mais curta entre dois nós. Esses nós geralmente são rotas de redes.</p><p>Esse tipo de pesquisa é útil quando você está tentando encontrar rotas em mapas. Ele oferece opções baseadas em encontrar o caminho mais curto possível.</p><h3 id="algoritmo-de-pesquisa-bin-ria"><strong>Algoritmo de pesquisa binária</strong></h3><p>Os algoritmos de pesquisa (ou de busca) binária também são conhecidos como pesquisa de meio intervalo. Eles retornam a posição do valor pesquisado em uma lista classificada.</p><p>Esses algoritmos usam a técnica de "dividir e conquistar" para encontrar a posição do valor.</p><p>Tanto os algoritmos de pesquisa binária quanto os de pesquisa linear são exemplos de algoritmos de pesquisa simples.</p><p>Na pesquisa binária, o elemento que fica no meio da lista é encontrado antes de ser feita a comparação com o valor do item que você está procurando. Na pesquisa linear, os elementos são obtidos um a um na lista, percorrendo e comparando com o valor da chave.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/tabela.png" class="kg-image" alt="tabela" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/tabela.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/tabela.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/tabela.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="788" loading="lazy"></figure><p>‌Na pesquisa binária, a lista é dividida em duas partes para obter o elemento do meio: temos os itens à esquerda, o elemento do meio e os itens à direita.</p><p>Os itens da esquerda contém valores menores que o elemento do meio enquanto os da direita têm valores maiores que ele. Esse método precisa de uma lista ordenada para funcionar.</p><p>Uma lista ordenada tem seus itens organizados em uma ordem específica. Geralmente, eles estão em ordem crescente, onde o valor de um item deve ser sempre maior que o anterior. Para tornar a pesquisa binária eficiente, os valores da lista devem ser organizados corretamente nessa ordem para satisfazer o processo da pesquisa. Se uma lista tiver seus valores desorganizados, ela deve ser ordenada por um algoritmo de classificação antes da realização da pesquisa.</p><h3 id="algoritmos-de-ordena-o"><strong>Algoritmos de ordenação</strong></h3><p>Os algoritmos de ordenação aceitam uma lista não classificada como entrada e retornam uma lista com os elementos organizados em uma ordem específica (principalmente na ordem crescente).</p><p>Existem <a href="https://www.freecodecamp.org/portuguese/news/algoritmos-de-ordenacao-explicados-com-exemplos-em-python-java-e-c/">diferentes tipos de algoritmos de ordenação</a>, como ordenação por inserção, ordenação rápida, ordenação por bolha e ordenação por mesclagem.</p><h2 id="como-funciona-a-pesquisa-bin-ria-dividir-e-conquistar"><strong>Como funciona a pesquisa binária – dividir e conquistar</strong></h2><p>Um algoritmo de busca binária usa uma técnica chamada "dividir e conquistar" para resolver sua tarefa. O algoritmo de ordenação por mesclagem emprega a mesma técnica para classificar itens em uma lista.</p><p>Em algoritmos de pesquisa binária, o método "dividir e conquistar" funciona deste modo:</p><ul><li>Divide a lista em duas partes: o lado esquerdo e o lado direito, separados pelo item do meio</li><li>Cria uma variável para armazenar o valor do item procurado</li><li>Seleciona o elemento do meio e o compara com o item procurado</li><li>Se os itens comparados forem iguais, retorna a posição do elemento do meio e o processo termina</li><li>Caso contrário, o elemento do meio será maior ou menor que o item que você está procurando. Se for maior, o algoritmo pega a lista da esquerda e recomeça a divisão do primeiro passo, até achar o elemento ou percorrer toda a lista. Se o elemento do meio for menor, ele pega a lista da direita e recomeça o processo.</li></ul><p>Você pode implementar esse método usando recursão ou iteração no processo de pesquisa binária.</p><h3 id="como-funciona-o-algoritmo-de-pesquisa-bin-ria-passo-a-passo"><strong>Como funciona o algoritmo de pesquisa binária – passo a passo</strong></h3><p>Primeiro, antes de realizar a pesquisa, você precisa classificar a lista.</p><p>Em seguida, você cria uma variável que armazena o valor a ser pesquisado.</p><p>A seguir, a lista é dividida em duas partes. Somamos o primeiro e o último índices, e dividimos por dois para encontrar o índice do elemento do meio na lista.</p><p>Quando o valor resultante do cálculo é um float (como 3,45), assumimos a parte inteira como o índice do elemento do meio.</p><p>Em seguida, comparamos o valor que estamos procurando e o elemento do meio.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/explicacao-1.png" class="kg-image" alt="explicacao-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/explicacao-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/explicacao-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/explicacao-1.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="450" loading="lazy"></figure><h3 id="caso-de-uso-da-pesquisa-bin-ria"><strong>Caso de uso da pesquisa binária</strong></h3><h4 id="condi-o-1"><strong>Condição 1</strong></h4><p>Se o elemento do meio for igual ao valor a ser pesquisado, a posição em que o valor está será retornada e o processo é finalizado.</p><pre><code>if elemento_do_meio == valor_pesquisado 
    return posição_do_elemento_do_meio
*fim do código* 
</code></pre><h4 id="usando-a-imagem-acima-como-exemplo-"><strong>Usando a imagem acima como exemplo:</strong></h4><p>O elemento do meio é igual a 23 e valor_pesquisado é igual a 23. Comparando os dois valores, vemos que eles são iguais. Como o elemento do meio aparece no índice 2 na lista, este é o valor de retorno do código. O processo termina.</p><h4 id="condi-o-2"><strong>Condição 2</strong></h4><p>Se o elemento do meio não for igual a "valor_pesquisado", verificamos os seguintes cenários:</p><p><strong><strong>Cenário 1</strong></strong>: se o elemento do meio for maior que o valor pesquisado:</p><p><code>if elemento_do_meio &gt; valor_pesquisado</code></p><ul><li>a pesquisa passa para o lado esquerdo porque os valores são menores que o elemento do meio</li><li>a variável nova_posicao muda para a anterior ao índice do elemento do meio</li><li>nova_posicao = indice(elemento_do_meio) - 1</li><li>uma nova pesquisa começa, mas agora só procura nos valores anteriores ao índice da nova posição.</li></ul><h4 id="usando-a-imagem-acima-como-exemplo--1"><strong>Usando a imagem acima como exemplo:</strong></h4><pre><code>elemento_do_meio = 23
valor_pesquisado = 4
if 23 &gt; 4 
</code></pre><ul><li>passamos para o lado esquerdo, pois todos os números menores que 23 estão armazenados à esquerda. O índice(de 23) é 2</li><li>nova_posicao = indice(23) - 1 = 2 - 1 = 1</li><li>A pesquisa terminará no índice 1 e pegará todos os valores antes do índice 1</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/explicacao2.png" class="kg-image" alt="explicacao2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/explicacao2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/explicacao2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/explicacao2.png 1199w" sizes="(min-width: 720px) 720px" width="1199" height="563" loading="lazy"></figure><p>Comparando o valor do novo elemento do meio (4) com o valor pesquisado (4), vemos que são iguais. Assim, a pesquisa é encerrada e o retorno é a posição que "4" ocupa na lista (que é o índice 0).</p><p><strong><strong>Cenário 2</strong></strong>: se o elemento do meio for menor que o valor a ser pesquisado:</p><p><code>if elemento_do_meio &lt; valor_pesquisado</code></p><ul><li>a pesquisa passa para o lado direito porque os valores são maiores que o elemento do meio</li><li>a variável nova_posicao muda para a posterior ao índice do elemento do meio</li><li>nova_posicao = indice(elemento_do_meio) + 1</li><li>uma nova pesquisa começa com o intervalo de pesquisa entre a nova posição e o último índice da lista</li></ul><h4 id="usando-a-primeira-imagem-como-exemplo-"><strong>Usando a primeira imagem como exemplo:</strong></h4><pre><code>elemento_do_meio = 23 
valor_pesquisado = 32 
if 23 &gt; 32 
</code></pre><ul><li>passamos para o lado direito porque todos os números maiores que 23 estão à direita: índice(23) = 2 ,</li><li>nova_posicao = indice(23) + 1 = 2 + 1 = 3</li><li>Uma nova pesquisa começará com todos os valores após o índice 3</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/explicacao3.png" class="kg-image" alt="explicacao3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/explicacao3.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/explicacao3.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/explicacao3.png 1199w" sizes="(min-width: 720px) 720px" width="1199" height="518" loading="lazy"></figure><p>Comparando o elemento do meio (32) com o valor pesquisado (32), vemos que eles são iguais. Assim, a pesquisa é encerrada e o retorno é a posição que "32" ocupa na lista (índice 4).</p><h2 id="-m-todos-usados-em-algoritmos-de-pesquisa-bin-ria"><strong>‌‌Métodos usados ​​em algoritmos de pesquisa binária</strong></h2><p>Existem dois métodos que podem implementar a técnica "dividir e conquistar" na pesquisa. Eles são a iteração e a recursão.</p><h3 id="o-que-itera-o"><strong>O que é Iteração?</strong></h3><p>Para obter elementos de uma tupla, lista ou um dicionário, você itera pelos itens com laços.</p><p>A iteração é a repetição de uma sequência de instruções durante a execução e possui um número contável de valores. Por exemplo, ao percorrer listas aleatórias, percorremos a variável real que contém as listas para obter esses valores.</p><h4 id="implementa-o-em-c-digo-da-pesquisa-bin-ria-com-itera-o"><strong>Implementação em código da pesquisa binária com iteração</strong></h4><p>Este é o código:</p><pre><code>def pesquisa_binaria(lista_de_numeros , valor_pesquisado):
    primeiro_indice = 0
    tamanho = len(lista_de_numeros)
    ultimo_indice = tamanho - 1
    indice_elemento_do_meio = (primeiro_indice + ultimo_indice) // 2
    elemento_do_meio = lista_de_numeros[indice_elemento_do_meio]

    encontrado = True
    while encontrado:
        if primeiro_indice == ultimo_indice:
            if elemento_do_meio != valor_pesquisado:
                encontrado = False
                return "Não aparece na lista"

        elif elemento_do_meio == valor_pesquisado:
            return f"{elemento_do_meio} encontrado na posição {indice_elemento_do_meio}"

        elif elemento_do_meio &gt; valor_pesquisado:
            nova_posicao = indice_elemento_do_meio - 1
            ultimo_indice = nova_posicao
            indice_elemento_do_meio = (primeiro_indice + ultimo_indice) // 2
            elemento_do_meio = lista_de_numeros[indice_elemento_do_meio]
            if elemento_do_meio == valor_pesquisado:
                return f"{elemento_do_meio} encontrado na posição {indice_elemento_do_meio}"

        elif elemento_do_meio &lt; valor_pesquisado:
            nova_posicao = indice_elemento_do_meio + 1
            primeiro_indice = nova_posicao
            ultimo_indice = tamanho - 1
            indice_elemento_do_meio = (primeiro_indice + ultimo_indice) // 2
            elemento_do_meio = lista_de_numeros[indice_elemento_do_meio]
            if elemento_do_meio == valor_pesquisado:
                return f"{elemento_do_meio} encontrado na posição {indice_elemento_do_meio}"



lista = [16 , 18 , 20 , 50 , 60 , 81 , 84 , 89]
print(pesquisa_binaria(lista , 81))
print(pesquisa_binaria(lista , 10))
</code></pre><p>Agora, vamos ver o que está acontecendo nele:</p><ul><li>Primeiro, passamos uma lista e um valor a ser pesquisado (<code>valor_pesquisado</code>) como parâmetros (entrada) para uma função.</li><li>Na função, criamos uma variável <code>primeiro_indice</code> para o primeiro índice da lista pesquisada e o atribuímos a "0". O primeiro índice de uma lista é sempre "0".</li><li>Em seguida, criamos quatro variáveis: <code>tamanho</code> para armazenar o tamanho da lista, <code>ultimo_indice</code> para armazenar o índice do último elemento da lista, &nbsp;<code>indice_elemento_do_meio</code> &nbsp;para armazenar o resultado da operação que encontra o índice do elemento do meio e <code>elemento_do_meio</code> para armazenar o valor do elemento do meio, obtido da lista, usando-o como posição.</li><li>Depois, introduzimos um laço <em>while </em>para fazer com que as condições sejam executadas repetidamente. Acima do laço <em>while </em>criamos uma variável chamada <code>encontrado</code> e a definimos como "True". Essa condição verifica se o "item a ser pesquisado" foi encontrado ou não.</li><li>No laço <em>while</em>, verificamos todas as condições. A primeira condição é verificar se o elemento do meio e a variável <code>valor_pesquisado</code> são iguais. Se forem iguais, a posição do item será retornada.</li><li>Em seguida, verificamos a segunda condição, que é se <code>elemento_do_meio != valor_pesquisado</code> (<code>!=</code> verifica se é diferente), que nos leva aos dois cenários:<br>– se o elemento do meio for maior que o item a ser pesquisado, a variável <code>nova_posicao</code> é definida como o índice anterior ao índice do elemento do meio (pois já sabemos que o elemento do meio não é o que procuramos). A pesquisa continuará. começando no primeiro índice, mas agora terminará na nova posição, cujo valor, agora é atribuído à variável <code>ultimo_indice</code>.<br>– Se o elemento do meio for menor que o item a ser pesquisado, a variável <code>nova_posicao</code> será definida com o índice posterior ao índice do elemento do meio. A variável <code>primeiro_indice</code> recebe esse valor dela, fazendo com que o intervalo de pesquisa agora comece a partir dessa nova posição e termine no último índice.</li></ul><p>Ao final desses cenários, verificamos se o novo elemento do meio é o mesmo que o item pesquisado. Se for o mesmo, a posição do item será retornada. Caso contrário, as condições serão verificadas até que os valores sejam iguais.</p><p>É possível, no entanto, que aconteçam erros, por exemplo, em que o valor que estamos procurando não aparece na lista. Se terminarmos o código só com essas duas condições, o laço continuará executando e eventualmente travará o sistema.</p><p>A fim de detectarmos esse erro, definimos uma condição para verificar se o primeiro índice é igual ao último índice. Em seguida, verificamos se o elemento do meio é igual ao item pesquisado. Se não for igual, a variável <code>encontrado</code> será definida como <code>False</code> e retornará a frase "Não aparece na lista", já que no código, o retorno é sempre uma frase.</p><p>A etapa final é chamar a função e o resultado a ser exibido.</p><p><strong>A<strong>qui estão os resultados:</strong></strong></p><p>Se o elemento estiver na lista, o retorno será a posição.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/code1.png" class="kg-image" alt="code1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/code1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/code1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/code1.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="370" loading="lazy"></figure><p>Se o elemento não estiver na lista, o retorno será uma frase como esta:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/code2.png" class="kg-image" alt="code2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/code2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/code2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/code2.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="370" loading="lazy"></figure><h3 id="o-que-recurs-o"><strong>O que é ‌‌recursão?</strong></h3><p>Uma função é dita recursiva se faz referência a si mesma ou a termos anteriores para resolver uma tarefa.</p><p>Uma função recursiva é repetitiva e é executada em sequência. Ela começa a partir de um problema complexo e o divide em problemas mais simples.</p><h4 id="implementa-o-em-c-digo-da-pesquisa-bin-ria-usando-recurs-o"><strong>Implementação em código da pesquisa binária usando recursão</strong></h4><p>Com recursão, fica um pouco mais simples e requer menos código. O código terá essa aparência:</p><pre><code>def pesquisa_binaria(lista_de_numeros, primeiro_indice, ultimo_indice, valor_pesquisado):
    if ultimo_indice &gt;= primeiro_indice:
       
        indice_elemento_do_meio = (primeiro_indice + ultimo_indice) // 2
        elemento_do_meio = lista_de_numeros[indice_elemento_do_meio]
       
 
        if elemento_do_meio == valor_pesquisado:
            return f"{elemento_do_meio} encontrado na posição {indice_elemento_do_meio}"
 
        elif elemento_do_meio &gt; valor_pesquisado:
            nova_posicao = indice_elemento_do_meio - 1
            # novo último índice é a nova posição
            return pesquisa_binaria(lista_de_numeros, primeiro_indice, nova_posicao, valor_pesquisado)
 
        elif elemento_do_meio &lt; valor_pesquisado:
            nova_posicao = indice_elemento_do_meio + 1
             #novo primeiro índice é a nova posição
            return pesquisa_binaria(lista_de_numeros, nova_posicao, ultimo_indice, valor_pesquisado)
 
    else:
        return "Não aparece na lista"
       
lista = [ 1, 9, 11, 21, 34, 54, 67, 90 ]
pesquisar = 34
primeiro = 0
ultimo= len(lista) - 1
 
print(pesquisa_binaria(lista,primeiro,ultimo,pesquisar))
</code></pre><ul><li>Primeiro, a função aceita quatro argumentos: &nbsp;<code>primeiro_indice</code>, <code>ultimo_indice</code>, <code>lista_de_numeros</code> e <code>valor_pesquisado</code>.</li><li>Em seguida, verificamos se o valor do último índice é maior ou igual ao valor do primeiro índice. Se a condição for verdadeira, atribuímos a operação de encontrar o índice do elemento do meio à variável chamada &nbsp;<code>indice_elemento_do_meio</code>. Então, o valor de <code>elemento_do_meio</code> é obtido da lista usando o <code>indice_elemento_do_meio</code> como posição.</li><li>Criamos uma instrução "if" sob o primeiro bloco "if" para verificar se o elemento do meio e a variável <code>valor_pesquisado</code> são iguais. Se forem iguais, a posição do item será retornada.</li><li>Em seguida, verificamos a segunda condição, que é se <code>elemento_do_meio != valor_pesquisado</code>, o que nos leva a dois cenários:<br>– se o elemento do meio for maior que o item pesquisado, a variável <code>nova_posicao</code> será o índice anterior ao elemento do meio. Agora, retornamos a própria função e passamos o valor de <code>nova_posicao</code> no parâmetro do <code>ultimo_indice</code>.<br>– se o elemento do meio for menor que o item pesquisado, <code>nova_posicao</code> será o índice posterior ao elemento do meio. Retornamos a própria função com o valor de <code>nova_posicao</code> substituindo o parâmetro <code>primeiro_indice</code>.</li><li>A última condição estará no mesmo encadeamento da primeira instrução "if". Se o <code>valor_pesquisado</code> não estiver na lista, ele retornará a frase "Não está na lista".</li></ul><p>A etapa final é chamar a função e exibir o resultado.</p><p><strong>A<strong>qui estão os resultados:</strong></strong></p><p>Se o elemento estiver na lista, retornará sua posição:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/code3.png" class="kg-image" alt="code3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/code3.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/code3.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/code3.png 1199w" sizes="(min-width: 720px) 720px" width="1199" height="469" loading="lazy"></figure><p>Se o elemento não estiver na lista, retornará uma frase:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/code4.png" class="kg-image" alt="code4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/code4.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/code4.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/code4.png 1199w" sizes="(min-width: 720px) 720px" width="1199" height="469" loading="lazy"></figure><h2 id="exemplos-reais-de-pesquisa-bin-ria-"><strong>Exemplos reais de pesquisa binária‌</strong></h2><p>Você pode não perceber, mas realizamos pesquisas binárias o tempo todo. Aqui estão alguns exemplos de como você pode encontrá-la no seu dia-a-dia ou no trabalho:</p><ul><li>Procurando uma palavra em um dicionário</li><li>Procurando um livro de literatura na seção de literatura em uma biblioteca</li><li>Procurando um elemento em uma lista ordenada</li><li>Procurando alunos com mais de 1,50 m de altura em uma fila de alunos organizados de acordo com suas alturas.</li></ul><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Agora, você deve estar familiarizado com o funcionamento dos algoritmos de pesquisa binária e com sua implementação em código.</p><p>Não é um problema se você não conseguir entender tudo de uma vez – apenas dê a si mesmo um tempo e vá praticando os algoritmos. Se encontrar algum erro ou se tiver dúvidas, entre em contato com a autora pelo <a href="https://twitter.com/HeritageAlabi1">Twitter</a>.</p><p>‌‌</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como escrever código fonte seguro para software proprietário ]]>
                </title>
                <description>
                    <![CDATA[ É o trabalho dos desenvolvedores de software trabalhando em software proprietário criar programas que forneçam as funcionalidades de que nossos clientes precisam. Além disso, também é nosso trabalho criar esses programas de maneira que sejam fáceis de usar, manter e atualizar. Desenvolvedores de software proprietário, contudo, possuem outra responsabilidade muito ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-escrever-codigo-fonte-seguro-para-software-proprietario/</link>
                <guid isPermaLink="false">62dab5fcfea2f10707d66c75</guid>
                
                    <category>
                        <![CDATA[ Segurança ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Mon, 22 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/software-development-code-security-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-write-secure-source-code-for-proprietary-software/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Write Secure Source Code for Proprietary Software</a>
      </p><p>É o trabalho dos desenvolvedores de software trabalhando em software proprietário criar programas que forneçam as funcionalidades de que nossos clientes precisam. Além disso, também é nosso trabalho criar esses programas de maneira que sejam fáceis de usar, manter e atualizar.</p><p>Desenvolvedores de software proprietário, contudo, possuem outra responsabilidade muito mais importante. Temos que criar um software que seja seguro e não coloque em risco os dados do usuário ou os sistemas de nossos clientes.</p><p>A chave para fazer isso é fortalecer nosso código-fonte e reforçar os processos de desenvolvimento para evitar que agentes mal-intencionados injetem qualquer coisa prejudicial enquanto trabalhamos.</p><p>Esses tipos de esforços são cruciais, pois o código-fonte é o componente básico de um programa de computador. Por isso, precisamos protegê-lo de quaisquer alterações não autorizadas.</p><p>Este artigo explicará o motivo de a proteção do código-fonte ser tão importante para projetos de software proprietário. Ele também dará aos programadores algumas dicas sobre como proteger seu código-fonte, bem como algumas orientações sobre como protegê-lo de alterações externas durante o processo de desenvolvimento.</p><h2 id="por-que-importante-proteger-seu-c-digo-fonte"><strong>Por que é importante proteger seu código-fonte?</strong></h2><p>O uso de código aberto no desenvolvimento de software proprietário cresce cada dia mais. Na última contagem, estima-se que até <a href="https://www.perforce.com/blog/vcs/using-open-source-code-in-proprietary-software">96% dos softwares proprietários</a> (texto em inglês) contenham algum código-fonte aberto. Os desenvolvedores usam esse tipo de código para acelerar o processo de desenvolvimento e evitar trabalho desnecessário. Do ponto de vista da segurança, isso é uma coisa boa.</p><p>De acordo com a maioria dos especialistas em segurança, é mais provável que um código aberto seja seguro e permaneça seguro devido ao <a href="https://www.itprotoday.com/linux/why-you-should-trust-open-source-software-security">grande número de olhos que o revisam</a> ao longo do tempo (texto em inglês).</p><p>Quando, no entanto, um desenvolvedor começa a juntar código-fonte aberto e a adicionar suas próprias personalizações para criar algo proprietário, toda essa segurança se encerra. A partir desse ponto, cabe ao desenvolvedor evitar adicionar quaisquer vulnerabilidades que possam levar a uma violação de dados ou a um golpe.</p><p>Dependendo da natureza do software em questão, há uma variedade de dados que podem estar em risco no seu software quando estiver concluído, incluindo:</p><ul><li>Senhas</li><li>Chaves de criptografia</li><li>Endereços IP</li><li>Tokens de autenticação e muito mais.</li></ul><p>Isso torna o vazamento de código-fonte uma das principais ameaças para qualquer desenvolvedor de software proprietário. Essa ameaça não é apenas teórica. Houve vários casos de <a href="https://www.wired.com/story/source-code-leak-dangers/">vazamentos de código proprietário</a> (texto em inglês) nos últimos anos. Em muitos desses casos, as consequências finais ainda estão longe de serem claras.</p><p>Em um dos casos, porém – o vazamento de todo o repositório do código-fonte do Twitch – as consequências foram muito graves. De acordo com uma análise dos dados, os hackers obtiveram acesso a <a href="https://blog.gitguardian.com/security-threats-from-the-twitch-leak/">quase 7.000 segredos</a> (texto em inglês). Esses segredos, que consistem nos tipos de dados listados acima, podem dar aos invasores acesso catastrófico à plataforma.</p><h2 id="as-principais-amea-as-seguran-a-do-c-digo-fonte"><strong>As principais ameaças à segurança do código-fonte</strong></h2><p>Existem duas categorias principais de ameaças à segurança de um código-fonte:</p><h3 id="amea-as-internas"><strong>Ameaças internas</strong></h3><p>O código-fonte fica à mercê dos desenvolvedores e de qualquer pessoa que tenha acesso a ele. Isso significa que limitar o acesso ao seu código-fonte e estabelecer diretrizes de segurança para aqueles que têm acesso é vital para aumentar a segurança.</p><p>Também é importante perceber que os agentes de ameaças internas nem sempre são mal-intencionados. Muitas vezes, as ameaças internas vêm de erros ou descuidos dos próprios funcionários.</p><p>Para exemplificar, um programador pode compartilhar partes do código-fonte em um fórum on-line procurando uma resposta que possa resolver um problema – fazendo com que o código acabe caindo em mãos erradas.</p><h3 id="amea-as-externas"><strong>Ameaças externas</strong></h3><p>As ameaças externas vêm de fora de sua equipe de desenvolvimento. Elas podem vir de concorrentes que desejam usar o código para melhorar seu próprio código. Também podem vir de hackers, que tentarão vender seu código-fonte ou que o vasculharão em busca de vulnerabilidades.</p><p>O ponto é que, não importando se um vazamento vem de ameaças internas ou externas, ele pode ter consequências terríveis. Vazamentos de código-fonte podem levar a ataques adicionais, expondo grandes quantidades de dados confidenciais.</p><p>Vazamentos de código-fonte também podem levar a perdas financeiras, dando vantagem aos concorrentes. Seus clientes pensarão duas vezes antes de negociar com um desenvolvedor que expôs dados valiosos de clientes no passado.</p><p>As regulamentações em torno da segurança também estão se tornando mais rígidas. Seus clientes podem enfrentar multas pesadas se não protegerem esses dados - e responsabilizarão você por isso.</p><h2 id="como-proteger-seu-c-digo-fonte"><strong>Como proteger seu código-fonte</strong></h2><p>Agora que você sabe a importância de proteger o código-fonte, vejamos algumas formas de reforçar sua segurança:</p><h3 id="implementar-pr-ticas-de-desenvolvimento-seguro"><strong>Implementar práticas de desenvolvimento seguro</strong></h3><p>A segurança do seu código-fonte começa já no início do ciclo de desenvolvimento. Quanto mais cedo você detectar falhas de segurança no código, melhor.</p><p>Você deve definir um conjunto claro de práticas de programação, regras e procedimentos logo no início de cada processo. Isso inclui treinar sua equipe de desenvolvimento nas melhores práticas de segurança e fornecer a documentação dos padrões de segurança que eles precisam seguir durante o projeto.</p><p>O Open Web Application Security Project (OWASP) oferece <a href="https://owasp.org/www-pdf-archive/OWASP_SCP_Quick_Reference_Guide_v2.pdf">um guia de referência abrangente</a> (texto em inglês), sendo um ótimo ponto de partida. Embora seja adaptado para aplicações para a web, seus conceitos são amplamente aplicáveis ​​a todos os tipos de trabalho em desenvolvimento de software.</p><p>Seus pontos mais importantes incluem:</p><ul><li>Conduzir toda a validação e codificação de dados em um único sistema confiável</li><li>Exigir autenticação padronizada e testada para acesso aos recursos do projeto</li><li>Tomar medidas para reduzir a complexidade do código sempre que for possível, para facilitar a auditoria de segurança</li><li>Projetar e criptografar os repositórios de código relacionados ao projeto</li><li>Tornar protegida e segura a construção das etapas de desenvolvimento.</li></ul><p>Ao manter seu código e processo de desenvolvimento alinhados com as melhores práticas de segurança estabelecidas no mercado, como as descritas acima, você pode reduzir drasticamente as chances de seu código ser comprometido ainda durante o desenvolvimento ou depois que estiver publicado. Como dizem, é melhor prevenir do que remediar.</p><p>Tão logo o código esteja escrito, você também deve usar <a href="https://www.nist.gov/itl/ssd/software-quality-group/source-code-security-analyzers">ferramentas de análise de segurança</a> (texto em inglês) a fim de identificar falhas de segurança e outros riscos. Essas ferramentas de análise de código também farão varreduras para garantir a conformidade com as melhores práticas de segurança e padrões de escrita de código. Essas ferramentas ajudarão você a identificar riscos e corrigir problemas básicos antes que seja tarde demais.</p><p>Algumas das ferramentas mais usadas para isso são:</p><ul><li><a href="https://www.appsonar.com/">Appsonar</a> – automatiza o teste de práticas recomendadas em mais de 15 idiomas e verifica vulnerabilidades de código conhecidas</li><li><a href="https://www.codiga.io/">Codiga</a> – verifica as melhores práticas, segurança, proteção e problemas de design em 18 linguagens e frameworks</li><li><a href="https://www.mend.io/sast/">Mend SAST</a> – fornece verificação automatizada de vulnerabilidades e a correção automática de vulnerabilidades conhecidas</li></ul><h3 id="criptografar-e-monitorar-dados-em-tr-nsito"><strong>Criptografar e monitorar </strong>dados em trânsito</h3><p>A criptografia de dados é crucial para a proteção do seu código-fonte. Dados em trânsito<strong> </strong>são particularmente vulneráveis. Por isso, é uma boa ideia encontrar formas de manter seu código seguro à medida que ele passa entre os membros da equipe de desenvolvimento.</p><p>Um bom lugar para começar é usar uma plataforma de compartilhamento de código ou colaboração que inclua criptografia de ponta a ponta.</p><p>Há uma variedade de soluções destinadas a desenvolvedores de software que incluem criptografia. Algumas das opções mais usadas são <a href="https://cryptpad.fr/">CryptPad</a>, <a href="https://www.codetogether.com/pro/">CodeTogether</a> e <a href="https://visualstudio.microsoft.com/services/live-share/">Visual Studio Live Share</a>. Dependendo da natureza do projeto, um deles certamente será uma adição valiosa ao <em>toolkit</em> (kit de ferramentas, em português) de sua equipe.</p><p>Se uma plataforma de compartilhamento de código for um exagero naquilo que você está trabalhando, você pode usar uma <a href="https://geekflare.com/secure-file-sharing/">plataforma de compartilhamento de arquivos criptografados</a> (texto em inglês) e usá-la para trocar trechos de código. E se você estiver trabalhando com uma equipe que não está toda em um único escritório, é uma boa ideia investir em uma VPN. A VPN vai mascarar seu endereço IP e criptografar todas as transferências de dados entre suas redes.</p><p>Saiba, porém, que as VPNs geralmente diminuem a velocidade da sua internet. Portanto, você deve fazer sua pesquisa antes de comprar uma para você e sua equipe. Algumas VPNs são <a href="https://nordvpn.com/features/fastest-vpn/">muito mais rápidas</a> (texto em inglês) do que outras e só perdem sua velocidade de forma incremental. Então, escolha com sabedoria ou você pode prejudicar a produtividade de sua equipe.</p><h3 id="controle-de-acesso"><strong>Controle de acesso</strong></h3><p>As únicas pessoas que devem ter acesso aos repositórios de código-fonte são os desenvolvedores e a equipe de controle de qualidade. Não há razão para dar acesso a qualquer pessoa que não esteja envolvida na prática com a escrita de código.</p><p>Ao limitar o número de pessoas com acesso, você pode diminuir significativamente o risco de ameaças internas. Proteja seu código com autenticação e controle de acesso de autorizações.</p><h3 id="realizar-revis-es-de-seguran-a-do-c-digo"><strong>Realizar revisões de segurança do código</strong></h3><p>As revisões de segurança do código são uma parte crítica do <a href="https://www.freecodecamp.org/news/get-a-basic-understanding-of-the-life-cycles-of-software-development/">SDLC (Software Development Lifecycle)</a> – texto em inglês. Essas revisões são particularmente importantes para a segurança, pois permitem que os membros da equipe identifiquem e resolvam quaisquer vulnerabilidades de segurança em potencial antes que o código seja publicado. Em muitos setores com os quais você pode vir a trabalhar, elas são obrigatórias para a conformidade regulatória.</p><p>É importante, entretanto, diferenciar revisão do código de revisão de segurança do código. Esta última deve se concentrar estritamente em "proteger" o código em termos de segurança. Revisões de código se concentram principalmente na correção de possíveis bugs ou falhas. Isso acontece com mais frequência enquanto sua base de código está em desenvolvimento pesado. Já as revisões de segurança do código devem acontecer principalmente quando seu código estiver próximo de um lançamento.</p><p>Nesse estágio, é uma boa ideia aplicar algumas técnicas abrangentes de proteção para dificultar o acesso de hackers ao software por meio de análise ou em tempo de execução.</p><p>Algumas técnicas incluem (textos em inglês):</p><ul><li><a href="https://www.freecodecamp.org/news/make-your-code-secure-with-obfuscation/">Ofuscação de código</a></li><li><a href="https://www.pelock.com/products/string-encrypt">Criptografia de string</a></li><li><a href="https://books.nowsecure.com/secure-mobile-development/en/coding-practices/anti-tamper-techniques.html">Detecção e resposta de adulterações em tempo de execução</a></li><li><a href="https://resources.infosecinstitute.com/topic/anti-debugging/">Medidas antidepuração</a></li></ul><p>Dependendo da sensibilidade dos dados com os quais seu software está lidando, pode ser necessário ir muito além das técnicas que compartilhei acima. Acima de tudo, você deve sempre atender às necessidades de segurança do cliente – mesmo que eles peçam para você fortalecer seu código além do que você acredita ser necessário.</p><h2 id="considera-es-finais"><strong>Considerações finais</strong></h2><p>Os desenvolvedores de software proprietário precisam prestar muita atenção à segurança do código-fonte. Eles não devem expor a si mesmos nem aos seus clientes a grandes riscos que são facilmente evitáveis.</p><p>Portanto, durante todo o processo de desenvolvimento, você precisa se proteger contra ameaças internas e externas. Não fazer isso pode colocar dados confidenciais em perigo, levando, potencialmente, a danos financeiros e de reputação significativos — a todos os envolvidos.</p><p><em><em>Imagem </em>produzida por <em>Gorodenkoff </em>e licenciada<em> </em>por meio da <em>Adobe Stock Photos</em></em></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript – Como verificar se um valor é undefined em JS ]]>
                </title>
                <description>
                    <![CDATA[ Uma variável indefinida ou qualquer tipo de variável sem valor sempre retornará "undefined" em JavaScript. É importante lembrar que isso não é a mesma coisa que o tipo null, apesar de ambos implicarem em um estado vazio. Normalmente, atribuímos um valor a uma variável depois de declará-la, mas nem sempre ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/javascript-como-verificar-se-uma-valor-e-undefined-em-js/</link>
                <guid isPermaLink="false">62d5d88ffea2f10707d664cf</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Thu, 18 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/Capa-FCC-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/javascript-check-if-undefined-how-to-test-for-undefined-in-js/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Check if Undefined – How to Test for Undefined in JS</a>
      </p><p>Uma variável indefinida ou qualquer tipo de variável sem valor sempre retornará "<em>undefined</em>" em JavaScript. É importante lembrar que isso não é a mesma coisa que o tipo <em>null</em>, apesar de ambos implicarem em um estado vazio.</p><p>Normalmente, atribuímos um valor a uma variável depois de declará-la, mas nem sempre esse é o caso.</p><p>Quando uma variável é declarada (ou inicializada) e nenhum valor é atribuído a ela, o JavaScript automaticamente a define como sendo "undefined" (indefinida), assim:</p><pre><code>let minhaString;

console.log(minhaString); // undefined
</code></pre><p>Além disso, quando tentamos acessar, por exemplo, um valor em um array ou objeto que não existe, ele também retorna <code>undefined</code>.</p><pre><code>let usuario = {
    nome: "John Doe",
    idade: 14
};

console.log(usuario.hobby); // undefined
</code></pre><p>Aqui temos outro exemplo:</p><pre><code>let meuArray = [12, 33, 44];

console.log(meuArray[7]); // undefined
</code></pre><p>Neste artigo, você aprenderá vários métodos e formas que você pode usar para saber se uma variável é <code>undefined</code> em JavaScript. Isso é necessário se você quiser evitar que seu código gere erros ao executar uma operação com uma variável indefinida.</p><p>Caso você esteja com pressa, aqui estão as três formas que podem ajudá-lo a verificar se uma variável é <code>undefined</code> no JavaScript:</p><pre><code>if(minhaString === undefined){}
if(typeof meuArray[7] === "undefined"){}
if(usuario.hobby === void 0){}
</code></pre><p>Agora vamos explicar cada um desses métodos com mais detalhes.</p><h2 id="como-verificar-se-uma-vari-vel-indefinida-em-javascript-com-compara-o-direta"><strong>Como verificar se uma variável é indefinida em JavaScript com comparação direta</strong></h2><p>Um dos primeiros métodos que vem à mente é a comparação direta. É aqui que você compara a saída para ver se ela retorna <code>undefined</code>. Você pode fazer isso facilmente da seguinte maneira:</p><pre><code>let usuario = {
    nome: "John Doe",
    idade: 14
};

if (usuario.hobby === undefined) {
    console.log("Isso está indefinido");
}
</code></pre><p>Esse caso também funciona para arrays, assim:</p><pre><code>let scores = [12, 34, 66, 78];

if (scores[10] === undefined) {
    console.log("Isso está indefinido");}
</code></pre><p>E com certeza também funciona para outras variáveis:</p><pre><code>let nome;

if (nome === undefined) {
    console.log("Isso está indefinido");}
</code></pre><h2 id="como-verificar-se-uma-vari-vel-indefinida-em-javascript-com-typeof"><strong>Como verificar se uma variável é indefinida em JavaScript com <code>typeof</code></strong></h2><p>Também podemos usar o tipo da variável para verificar se ela é <code>undefined</code>. Felizmente, para nós, <em>undefined</em> é o tipo de dado de quando qualquer tipo de variável não tem valor atribuído, como você pode ver abaixo: ‌</p><pre><code>let nome;

console.log(typeof nome); // "undefined"
</code></pre><p>Com isso, agora podemos usar o <code>typeof</code> para verificar se temos <em>undefined</em> em todos os tipos de dados como vimos acima. Veja como será a verificação para todos os três cenários que consideramos:</p><pre><code>if(typeof usuario.hobby === "undefined"){}
if(typeof scores[10] === "undefined"){}
if(typeof nome === "undefined"){}
</code></pre><h2 id="como-verificar-se-uma-vari-vel-indefinida-em-javascript-com-o-operador-void"><strong>Como verificar se uma variável é indefinida em JavaScript com o operador <code>void</code></strong></h2><p>O operador <code>void</code> é frequentemente usado para obter o valor primitivo <code>undefined</code>. Você pode fazer isso usando <code>void(0)</code>, que é semelhante a <code>void 0</code>, assim:</p><pre><code>console.log(void 0); // undefined
console.log(void(0)); // undefined
</code></pre><p>Na verdade, isso funciona como uma comparação direta (que mostrei antes). Apenas substituímos <code>undefined</code> por <code>void(0)</code> ou <code>void 0</code>. O código fica, então, assim:</p><pre><code>if(typeof usuario.hobby === void 0){}
if(typeof scores[10] === void 0){}
if(typeof nome === void 0){}
</code></pre><p>Ou assim:</p><pre><code class="language-js">if(typeof usuario.hobby === void(0)){}
if(typeof scores[10] === void(0)){}
if(typeof nome === void(0)){}
</code></pre><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Neste artigo, aprendemos como verificar se uma variável é indefinida e o que faz com que ela seja indefinida.</p><p>Bons estudos e divirta-se com os códigos!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como animar seu histórico de commits do Git com git-story ]]>
                </title>
                <description>
                    <![CDATA[ Muitas vezes, é útil para os desenvolvedores visualizarem aspectos de seus projetos de código. Especialmente em sistemas de controle de versão como o Git, onde é essencial entender o fluxo de trabalho da equipe. Uma maneira de abordar isso no Git é desenhar um grafo como o que você viu ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-animar-seu-historico-de-commits-do-git-com-git-story/</link>
                <guid isPermaLink="false">62da345cfea2f10707d66bcc</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Wed, 17 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/git-story-image-1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/animate-your-git-repo-with-git-story/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Animate Your Git Commit History with git-story</a>
      </p><p>Muitas vezes, é útil para os desenvolvedores visualizarem aspectos de seus projetos de código. Especialmente em sistemas de controle de versão como o Git, onde é essencial entender o fluxo de trabalho da equipe.</p><p>Uma maneira de abordar isso no Git é desenhar um grafo como o que você viu na imagem inicial.</p><p>Você, provavelmente, já encontrou imagens como essa quando estava <a href="https://initialcommit.com/cluster/git-commands-git-cheat-sheets">aprendendo como usar o Git</a> (texto em inglês).</p><p>Esse grafo mostra um exemplo de histórico de revisões em um repositório do Git.</p><p>No Git, o histórico de revisões é representado como um DAG, ou <strong><strong>Directed Acyclic Graph</strong></strong> (grafo acíclico direcionado), que é um tipo de grafo de rede. Cada revisão é exibida como um círculo e as revisões são encadeadas usando setas. Cada seta aponta de uma revisão para sua antecessora imediata.</p><p>Na maioria das vezes, se você desejar um grafo desses, precisa desenhá-lo (manual ou digitalmente) – o que leva tempo e esforço. Além disso, esses grafos são estáticos e, em certos casos, seria muito mais interessante animar a progressão das revisões em um vídeo.</p><p>Por esses motivos, criei o <strong><strong><a href="https://initialcommit.com/tools/git-story">Git Story</a></strong></strong> (texto em inglês), que permite gerar facilmente vídeos em mp4 apresentando o layout e a progressão do histórico do Git, com apenas um único comando: <code>git-story</code>.</p><h2 id="como-visualizar-o-hist-rico-de-revis-es-do-git"><strong>Como visualizar o histórico de revisões do Git</strong></h2><p>No Git, uma revisão também é conhecida como <em>commit</em>. Ela representa um conjunto de alterações ao conteúdo feitas em um momento específico por uma pessoa específica.</p><p>Existem vários componentes adicionais que nos ajudam a entender visualmente nosso histórico do Git.</p><h3 id="propriedades-dos-commit"><strong>Propriedades dos commit</strong></h3><p>Ao fazer um <em>commit</em> no Git, a legibilidade é importante. Portanto, é uma prática recomendada deixar uma <a href="https://initialcommit.com/blog/git-commit-messages-best-practices">mensagem no <em>commit</em></a> (texto em inglês) de forma clara, descrevendo sua alteração. Isso ajuda outros desenvolvedores que visualizam o histórico de <em>commits</em> a entender o propósito de cada alteração.</p><p>O ID do <em>commit</em> é um identificador exclusivo para cada <em>commit</em>, gerado especificamente a partir de seu conteúdo. Como usuário do Git, você provavelmente já viu que muitos comandos dele aceitam como argumento um ID de <em>commit</em> total ou parcial. Por esse motivo, ter IDs de <em>commit </em>disponíveis nas visualizações do Git pode ser muito útil.</p><h3 id="refer-ncias-branches-head-e-tags"><strong>Referências: branches, HEAD e tags</strong></h3><p>Ao visualizar o histórico do Git, também é útil saber onde você está. E uma referência no Git te ajuda a entender como os <em>commits</em> estão organizados no seu repositório.</p><p>Referências são rótulos (<em>labels</em>) que o Git anexa a <em>commits</em> específicos. Nomes de <em>branch</em>, <a href="https://initialcommit.com/blog/what-is-git-head">Git HEAD</a> (texto em inglês) e <em>tags </em>são todos exemplos de referências. Você pode pensar em um referência como um nome legível para nós, humanos, que aponta para um <em>commit</em> específico.</p><h3 id="v-deo-gerado-pelo-git-story"><strong>Vídeo gerado pelo Git Story</strong></h3><p>O <a href="https://initialcommit.com/tools/git-story"><strong>Git Story</strong></a> (texto em inglês) analisa todas essas informações para você – <em>commits</em>, relacionamentos e referências – e as anima em um vídeo <code>.mp4</code>. A melhor parte é que tudo o que você precisa fazer é navegar no terminal até o seu projeto e executar o comando <code>git-story</code>.</p><p>Abaixo temos um exemplo de uma animação de vídeo gerada pelo Git Story:</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/fI9D-c9wgPs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Git Story Sample 1" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="por-que-escrevi-o-git-story-em-python"><strong>Por que escrevi o Git Story em Python</strong></h2><p>Eu escolhi escrever Git Story em Python, pois existem duas bibliotecas muito úteis que alimentam este projeto.</p><h3 id="gitpython"><strong>GitPython</strong></h3><p>A primeira é chamada <a href="https://gitpython.readthedocs.io/en/stable/intro.html">GitPython</a> (texto em inglês), que é um pacote Python que fornece acesso a dados de repositórios do Git através de um conjunto de métodos práticos. É assim que o Git Story acessa os dados do repositório local do Git para animá-lo:</p><pre><code class="language-python">import git

repo = git.Repo(search_parent_directories=True)</code></pre><p>Isso cria um objeto do repositório na memória do programa em Python que permite acesso aos objetos subjacentes do Git, além de suas propriedades. Uma lista de <em>commits </em>pode ser acessada da seguinte forma:</p><pre><code class="language-python">commits = list(repo.iter_commits(REF))

# Isso puxa uma lista de commits, de trás para frente, de REF
# REF pode ser um nome de branch, tag, HEAD ou uma ID de um commit</code></pre><p>A iteração na lista de <em>commits </em>permite o acesso às propriedades de cada <em>commit</em>, que são usadas na próxima etapa para gerar a animação.</p><h3 id="manim"><strong>Manim</strong></h3><p>A segunda dependência é chamada <a href="https://www.manim.community/">Manim</a> (texto em inglês)<a href="https://www.manim.community/">,</a> que é usada para gerar vídeos de matemática animados usando uma API em Python. O Manim facilita muito a criação de objetos em Python que representam linhas, formas, textos e equações e a colocação desses objetos em uma animação.</p><p>O Git Story usa o Manim para desenhar os círculos, as setas, os textos, e os nomes de cada <a href="https://initialcommit.com/blog/git-branches">branch do Git</a> (texto em inglês) e cada referência que representa o intervalo do seu histórico do Git obtido pelo GitPython.</p><p>Esse é um código que mostra como o Manim é usado para criar um círculo vermelho para cada <em>commit</em>:</p><pre><code class="language-python">circle = Circle(stroke_color=commitFill, fill_color=commitFill, fill_opacity=0.25)</code></pre><p>Aqui vemos como o Manim é usado para criar as setas entre os <em>commits</em>:</p><pre><code class="language-python">arrow = Arrow(start=RIGHT, end=LEFT, color=self.fontColor).next_to(circle, LEFT, buff=0)</code></pre><p>Por fim, aqui vemos como esses objetos são adicionados a uma animação:</p><pre><code class="language-python">self.play(Create(circle), Create(arrow))</code></pre><h2 id="como-instalar-o-git-story"><strong>Como instalar o Git Story</strong></h2><ol><li>Instale o <a href="https://www.manim.community/">manim e suas dependências em seu sistema operacional</a></li><li>Instale o GitPython :<code>$ pip3 install gitpython</code></li><li>Instale o git-story: <code>$ pip3 install git-story</code></li></ol><h2 id="como-usar-o-git-story"><strong>Como usar o Git Story</strong></h2><ol><li>Abra um terminal de linha de comando</li><li>Navegue até a pasta raiz do seu projeto Git usando <code>cd</code></li><li>Execute o comando: <code>git-story</code></li></ol><p>A execução deste comando gerará uma animação de vídeo <code>.mp4</code> dos 8 commits mais recentes em seu repositório Git. O arquivo de vídeo será colocado no diretório atual, no caminho <code>./git-story_media/videos</code>.</p><h2 id="como-personalizar-a-anima-o-do-git-story"><strong>Como personalizar a animação do Git Story</strong></h2><p>O Git Story inclui várias formas de modificar como seu repositório do Git é representado no vídeo gerado. Você faz isso por meio de opções e <em>flags </em>da linha de comando.</p><p>Para especificar o número de <em>commits </em>para animar, por exemplo, use a opção <code>--commits=X</code>, onde <code>X</code> é o número de <em>commits</em> que você deseja mostrar.</p><p>Você também pode querer começar a animar a partir de um <em>commit </em>específico, que não o <code>HEAD</code>. Para isso, você pode usar a opção <code>--commit-id=ref</code> para selecionar o <em>commit</em> inicial pelo qual deseja começar, de trás para frente. Em vez de <code>ref</code>, você também pode substituir por um ID total ou parcial de um <em>commit</em>, nome de branch ou <a href="https://initialcommit.com/blog/git-tag">tag do Git</a> (texto em inglês).</p><p>Você pode usar a <em>flag</em> <code>--reverse</code> para animar os <em>commits</em> do mais novo para o mais antigo, que é a ordem cronológica reversa, para corresponder melhor à saída de <a href="https://initialcommit.com/blog/git-log">log do Git</a> (texto em inglês).</p><p>Experimente a <em>flag</em> <code>--low-quality</code> para acelerar o tempo de geração da animação durante o teste. Quando estiver satisfeito com a aparência da sua animação, remova a <em>flag</em> e execute o comando novamente para obter uma versão final de melhor qualidade.</p><p>Se preferir um esquema de cores claras em vez do padrão escuro, você pode especificar a <em>flag</em> <code>--light-mode</code>.</p><p>Para fins de apresentação, você pode adicionar um título de introdução, logotipo e conclusão à sua animação. Você pode fazer isso com as seguintes opções:</p><pre><code class="language-sh">$ git-story --show-intro --title "My Git Repo" --show-outro --outro-top-text "My Git Repo" --outro-bottom-text "Thanks for watching!" --logo path/to/logo.png</code></pre><p>Use a opção <code>--media-dir=path/to/output</code> para definir o caminho do vídeo a ser gerado. Isso é útil se você não quiser que arquivos extras sejam criados dentro do seu projeto.</p><p>Finalmente, você pode querer testar a <em>flag </em><code>--invert-branches</code> se o histórico de <em>commits </em>do Git tiver vários <em>branches</em>. Essa <em>flag </em>mudará a ordem em que as <em>branches</em> são analisadas, o que altera a orientação da <em>branch</em> no vídeo gerado. Algumas animações ficarão melhores com essa <em>flag</em> definida e outras não.</p><p>Aqui está um exemplo final que mostra a aparência do vídeo quando existem várias <em>branches</em> no intervalo de <em>commits</em>:</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/0uj5jRfOaZc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Git Story Sample 2" name="fitvid1"></iframe>
          </div>
        </div>
      </figure><h2 id="resumo"><strong>Resumo</strong></h2><p>Git Story é uma ferramenta de linha de comando que escrevi em Python para facilitar a criação de animações de vídeo do seu histórico de <em>commits </em>do Git. As dependências incluem Manim e GitPython.</p><p>A animação exibe o conjunto desejado de <em>commits</em> e seus relacionamentos, juntamente com os nomes das <em>branches</em>, o <em>commit</em> <code>HEAD</code> e as <em>tags</em>.</p><p>O Git Story tem uma variedade de <em>flags</em> e opções de linha de comando que permitem personalizar a animação. Execute o comando <code>git-story -h</code> para exibir a lista completa de opções disponíveis.</p><p>Sinta-se à vontade para enviar um e-mail para o autor deste artigo com comentários, perguntas ou sugestões: <a href="mailto:jacob@initialcommit.io">jacob@initialcommit.io</a>.</p><p><em>Pull requests</em> também são muito bem-vindos à página do <a href="https://github.com/initialcommit-com/git-story">Git Story no GitHub</a>.</p><p>Obrigado pela ler e uma boa programação para você!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como inserir um elemento em um array em JS ]]>
                </title>
                <description>
                    <![CDATA[ O array é um dos tipos de dados mais utilizados ​​quando estamos trabalhando com uma lista ordenada de valores. Cada valor é referido como um elemento com um id único. Ele armazena elementos de vários tipos de dados, que você pode acessar por meio de uma única variável. Na prática, ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-inserir-um-elemento-em-um-array-em-js/</link>
                <guid isPermaLink="false">62da1dacfea2f10707d66bad</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Tue, 16 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/Capa-FCC.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-insert-an-element-into-an-array-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Push into an Array in JavaScript – How to Insert an Element into an Array in JS</a>
      </p><p>O array é um dos tipos de dados mais utilizados ​​quando estamos trabalhando com uma lista ordenada de valores.</p><p>Cada valor é referido como um elemento com um <code>id</code> único. Ele armazena elementos de vários tipos de dados, que você pode acessar por meio de uma única variável.</p><p>Na prática, um array pode conter uma lista de usuários. Podemos precisar adicionar um ou mais de um elemento ao array após o último elemento, antes do primeiro elemento ou em qualquer ponto específico do nosso array.</p><p>Este artigo mostrará como inserir um elemento em um array usando o JavaScript. Caso você esteja com pressa, aqui estão os métodos que discutiremos detalhadamente neste artigo:</p><pre><code>// Adicionar ao início de um array
Array.unshift(elemento);

// Adicionar ao final de um array
Array.push(elemento);

// Adicionar em uma posição especificada
Array.splice(posicao_inicial, 0, novo_elemento...);

// Adicionar com o método concat sem alterar o array original
let novoArray = [].concat(array, elemento);
</code></pre><ul><li>Se você quiser adicionar um elemento no final do seu array, use o método <code>push()</code>.</li><li>Se você precisar adicionar um elemento no início do seu array, use o método <code>unshift()</code>.</li><li>Se você deseja adicionar um elemento em uma posição específica do seu array, use o método <code>splice()</code>.</li><li>Por fim, se você quiser manter seu array original, pode usar o método <code>concat()</code>.</li></ul><h2 id="como-inserir-no-in-cio-de-um-array-com-o-m-todo-unshift-"><strong>Como inserir no início de um array com o método <code>unshift()</code></strong></h2><p>Em JavaScript, você usa o método <code>unshift()</code> para adicionar um ou mais elementos no início de um array e ele retorna o comprimento do array após a adição dos novos elementos.</p><p>Por exemplo, se tivermos um array de países e se quisermos adicionar um país antes de "Nigéria", que é atualmente o primeiro índice, <code>0</code>, podemos fazer isso com o método <code>unshift()</code>, conforme mostrado abaixo:</p><pre><code>const paises = ["Nigéria", "Gana", "Ruanda"];

paises.unshift("Quênia");

console.log(paises); // ["Quênia","Nigéria", "Gana", "Ruanda"]
</code></pre><p>Como dissemos, também podemos adicionar mais de um elemento usando o <code>unshift()</code>:</p><pre><code>const paises = ["Nigéria", "Gana", "Ruanda"];

paises.unshift("África do Sul", "Mali", "Quênia");

console.log(paises); // ["África do Sul", "Mali", "Quênia","Nigéria", "Gana", "Ruanda"]</code></pre><p>Em nossa explicação do método <code>unshift()</code>, também afirmamos que ele retorna o comprimento do novo array, o que é verdade:</p><pre><code>const paises= ["Nigéria", "Gana", "Ruanda"];

let paisesComprimento = paises.unshift("África do Sul", "Mali", "Quênia");
console.log(paisesComprimento); // 6
</code></pre><h2 id="como-inserir-no-final-de-um-array-com-o-m-todo-push-"><strong>Como inserir no final de um array com o método <code>push()</code></strong></h2><p>O método <code>push()</code> é semelhante ao <code>unshift()</code>, só que adiciona um elemento no final de um array ao invés de no início. Ele também retorna o comprimento do novo array e, igual ao <code>unshift()</code>, pode ser usado para adicionar mais de um elemento ao mesmo tempo.</p><p>Faremos o mesmo exemplo, só que desta vez adicionando no final do array usando o método <code>push()</code>:</p><pre><code>const paises= ["Nigéria", "Gana", "Ruanda"];
paises.push("Quênia");
console.log(paises); // ["Nigéria", "Gana", "Ruanda","Quênia"]
paises.push("África do Sul", "Mali");
console.log(paises); // ["Nigéria", "Gana", "Ruanda"</code></pre><p>Como dissemos, podemos usá-lo para obter o comprimento do novo array:</p><pre><code>const paises = ["Nigéria", "Gana", "Ruanda"];
let paisesComprimento = paises.push("Quênia");
console.log(paisesComprimento)</code></pre><h2 id="como-inserir-em-uma-posi-o-espec-fica-do-array-com-o-m-todo-splice-"><strong>Como inserir em uma posição específica do array com o método <code>splice()</code></strong></h2><p>Até agora, vimos apenas como adicionar um elemento no início ou no final de um array. Você pode, no entanto, se perguntar como adicionar um elemento em uma posição especifica do array. Bem, você pode fazer isso com o método <code>splice()</code>.</p><p>O <code>splice()</code> é um método de propósito geral usado para alterar o conteúdo de um array, removendo, substituindo ou adicionando elementos em posições especificas do array. Esta seção abordará como usar esse método para adicionar um elemento em uma posição especifica.</p><p>Por exemplo, considere o seguinte array de países, que contém três elementos (países) organizados em ordem alfabética:</p><pre><code>const paises = ["Gana", "Quênia", "Ruanda"];</code></pre><p>Suponha que queremos adicionar o elemento "Nigéria", que, de acordo com a ordem alfabética, deve ser colocado na segunda posição, no índice <code>1</code> (depois de Gana e antes do Quênia). Nesse caso, usaremos o método <code>splice()</code> com a seguinte sintaxe:</p><pre><code>Array.splice(posicao_inicial, 0, novo_elemento...);
</code></pre><ul><li>A <code>posicao_inicial</code> especifica o índice de onde queremos que o novo elemento seja inserido no array. Se houver vários elementos, ele especifica onde os elementos inseridos começarão.</li><li>Se quisermos somente adicionar ao array, definimos o segundo argumento como zero (<code>0</code>), instruindo o método <code>splice()</code> a não excluir nenhum elemento do array.</li><li>Os parâmetros ou elementos seguintes (um ou mais de um) são os elementos que queremos adicionar ao array na posição especificada.</li></ul><p>Para colocar "Nigéria" depois de "Gana" em nosso array de países, escreveríamos isto:</p><pre><code>const paises = ["Gana", "Quênia", "Ruanda"];

paises.splice(1, 0, "Nigéria");

console.log(paises); // ["Gana","Nigéria", "Quênia", "Ruanda"]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/array-1.png" class="kg-image" alt="array-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/array-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/array-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/array-1.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="560" loading="lazy"></figure><p>Assim como fizemos em outros métodos, também podemos adicionar mais de um elemento:</p><pre><code>const paises = ["Gana", "Quênia", "Ruanda"];
paises.splice(1, 0, "Mali", "Nigéria");
console.log(paises); // ["Gana","Mali","Nigéria","Quênia","Ruanda"]
</code></pre><p>Observe que os métodos anteriores retornaram o comprimento do novo array, já esse método altera o array original. Por ele não ter removido nenhum elemento, retorna um array vazio.</p><h2 id="como-inserir-elementos-em-um-array-com-o-m-todo-concat-"><strong>Como inserir elementos em um array com o método <code>concat()</code></strong></h2><p>Podemos usar o método <code>concat()</code> para adicionar elementos em um array sem mudar ou alterar o array original. Ao invés disso, criamos um novo array, que é um método melhor quando não quisermos que o array original seja alterado.</p><p>Podemos usar esse método para adicionar elementos no início ou no final do array, de acordo como ordenamos os elementos:</p><pre><code>const paises = ["Gana", "Nigéria", "Ruanda"];
let novoPaises = [].concat("Mali", paises, "Quênia");
console.log(novoPaises)</code></pre><p>O método <code>concat()</code> também nos permite juntar dois (ou mais) arrays em um único novo array:</p><pre><code>const paisesAfricanos = ["Gana", "Nigéria", "Ruanda"];
const paisesEuropeus = ["Alemanha", "França", "Espanha"];

let paises = [].concat(paisesAfricanos, paisesEuropeus);

console.log(paises); // ["Gana","Nigéria","Ruanda","Alemanha", "França", "Espanha"]
</code></pre><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Neste artigo, aprendemos várias formas de inserir elementos em um array – no início, no final ou em qualquer posição – usando o método <code>splice()</code>.</p><p>Também aprendemos que o método <code>concat()</code> nos permite inserir elementos sem alterar o array original.</p><p>Use para isso o método que atender às suas necessidades.</p><p>Boa programação para você!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como fazer a implantação de vários repositórios em subdiretórios de um site com o Netlify ]]>
                </title>
                <description>
                    <![CDATA[ Olá! 👋 Você, provavelmente, está aqui porque quer hospedar dois sites/repositórios em um site usando o Netlify ou já está lidando com isso. Talvez você já tenha verificado as respostas na página da comunidade do Netlify e ainda continue confuso. Saiba que a mesma confusão e dor de cabeça me ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-fazer-a-implantacao-de-varios-repositorios-em-subdiretorios-de-um-site-com-o-netlify/</link>
                <guid isPermaLink="false">62da0530fea2f10707d66ad2</guid>
                
                    <category>
                        <![CDATA[ Netlify ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Mon, 15 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/pexels-xxss-is-back-777001-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-deploy-multiple-repos-to-subfolders-under-one-website-netlify/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Deploy Multiple Repositories to Subfolders Under One Website with Netlify</a>
      </p><p>Olá! 👋 Você, provavelmente, está aqui porque quer hospedar dois sites/repositórios em um site usando o Netlify ou já está lidando com isso.</p><p>Talvez você já tenha verificado as respostas na página da comunidade do Netlify e ainda continue confuso.</p><p>Saiba que a mesma confusão e dor de cabeça me levaram a escrever este tutorial para você não precisar se esforçar tanto quanto eu precisei. :)</p><p>Adianto apenas que é um pouco complicado, mas funciona: a solução para esse problema é o arquivo <code>netlify.toml</code> ou o <code>_redirects</code>.</p><p>Vamos começar!</p><p>Estou trabalhando em um projeto com alguns colegas e resolvemos dividir as tarefas. Eu fiquei com a documentação.</p><h2 id="tecnologias-que-usaremos"><strong>Tecnologias que usaremos</strong></h2><ul><li>O <a href="https://docusaurus.io/docs/">Docusaurus</a> para fazer sites bonitos de documentação em pouco tempo.</li><li>O Next.js/React.js para o nosso site principal.</li></ul><p>Podemos hospedar a documentação de duas formas:</p><ol><li>Usando um subdomínio: docs.siteprincipal.dev</li><li>Hospedando como um subdiretório: siteprincipal.dev/docs.</li></ol><p>Baseado em outros projetos de documentação que vi sendo implementados, também resolvi hospedá-lo no Netlify como um subdiretório.</p><p>Acho que isso dá um aspecto mais profissional à documentação.</p><p>Se você também quiser hospedar o Docusaurus como subdiretório, precisará fazer algumas configurações.</p><h2 id="etapa-1-atualizar-o-url-base"><strong>Etapa 1 – Atualizar o URL base</strong></h2><p>Alteraremos o <strong>URL base</strong> no arquivo docusaurus.config.js para <strong>"/docs/"</strong>, desta forma:</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">  title: 'Seu Título de Documentação',
  tagline: 'Seu slogan de documentação',
  url: 'meu-site-de-documentacao.netlify.app',
  baseUrl: "/docs/",
  onBrokenLinks: 'throw',
  onBrokenMarkdownLinks: 'warn',
  favicon: '/favicon.ico',</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;">docusaurus.config.js</font></figcaption></figure><p>Quando alteramos o URL base para <strong>/docs/</strong>, estamos fazendo com que nosso site de documentação seja renderizado exatamente no endereço <strong>https://siteprincipal.dev/docs/</strong>.</p><p>Se tivéssemos definido o <strong>URL base</strong> como <strong>"/"</strong>, ocorreria um erro, pois entraria em conflito com o URL do site principal. Fazendo a alteração, também não teremos o trabalho de lidar com o proxy no site da documentação.</p><h2 id="etapa-2-atualizar-o-routebasepath"><strong>Etapa 2 – Atualizar o routeBasePath</strong></h2><p>Precisamos, além disso, nos certificar de que o conteúdo da documentação seja veiculado a partir do domínio principal, alterando o <strong>routeBasePath</strong> para <strong>"/"</strong>.</p><p>Desse modo, temos:</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">  presets: [
    [
      'classic',
      /** @type {import('@docusaurus/preset-classic').Options} */
      ({
        docs: {
          routeBasePath: '/',
        },
      }),
    ],
  ],</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;">docusaurus.config.js</font></figcaption></figure><p>Isso ativa no docusaurus o modo "somente documentação", que faz com que toda a documentação seja enviada a partir do domínio principal, mas com o caminho '/docs/' como caminho de base.</p><p>Depois dessas configurações, já conseguimos executar o comando <code>npx docusaurus start</code> no localhost para ver se o site da documentação é compilado e renderizado sem problemas.</p><p>Se não tiver problemas, você deve ver algo assim:<br></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/docusaurus-run-localhost-1.jpg" class="kg-image" alt="docusaurus-run-localhost-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/docusaurus-run-localhost-1.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/08/docusaurus-run-localhost-1.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/docusaurus-run-localhost-1.jpg 1223w" sizes="(min-width: 720px) 720px" width="1223" height="182" loading="lazy"><figcaption>Seu site do docusaurus deve renderizar no caminho '/docs/' como caminho de base.</figcaption></figure><p>Para ler mais sobre as configurações do modo "somente documentação" no docusaurus, a documentação dele está <a href="https://docusaurus.io/docs/docs-introduction#docs-only-mode">aqui</a> (em inglês).</p><h2 id="etapa-3-fazer-a-implanta-o-deploy-no-netlify"><strong>Etapa 3 – Fazer a implantação (deploy) no Netlify</strong></h2><p>Agora, é hora de implantarmos o site da documentação no Netlify, que é quando o colocamos no ar. Se você ainda não sabe como fazer isso, confira <a href="https://docusaurus.io/docs/deployment#deploying-to-netlify">aqui</a> (texto em inglês).</p><p>Quando finalizarmos a implantação, o URL do site no Netlify ficará assim: meu-site-de-documentacao.netlify.app.</p><h2 id="etapa-4-fazer-o-redirecionamento-por-proxy"><strong>Etapa 4 - Fazer o redirecionamento por Proxy</strong></h2><p>Aqui é a parte em que se faz o redirecionamento da página (ou proxying).</p><p>Já hospedamos tanto o site principal quanto o site da documentação no Netlify.</p><p>Agora, precisamos criar um arquivo <em><em>netlify.toml</em></em> na pasta raiz do projeto/repositório do site principal e adicionar nele as seguintes linhas:</p><pre><code class="language-markdown">[[redirects]]
from = "/docs/*"
to = "https://meu-site-de-documentacao.netlify.app/:splat"
status = 200
force = false</code></pre><p>A regra acima garante que, sempre que o caminho <strong>/docs/</strong> for consultado no site principal, o site da documentação carregue normalmente no caminho <strong>siteprincipal.netlify.app/docs/</strong>.</p><p>Outra forma de fazer esse proxy é através de site/repositório da documentação. Basta criar um arquivo<em> netlify.toml</em> na raiz do seu site/repositório de documentação e adicionar nele as seguintes linhas:</p><pre><code class="language-toml">[[redirects]]
from = "/*"
to = "https://siteprincipal.netlify.app/docs/:splat"
status = 301
force = true</code></pre><p>A regra acima garante que, sempre que o caminho <strong>"/*"</strong> for consultado no site da documentação, ele será carregado normalmente no caminho <strong>siteprincipal.netlify.app/docs/</strong>.</p><p>Observe que o caminho d0 site da documentação no Netlify agora estará quebrado, mas funcionará perfeitamente no subdiretório do site principal.</p><p>Já que agora está tudo funcionando e alcançamos nossos objetivos, que assim seja 😁.<br></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/docs-site-netlify-error.jpg" class="kg-image" alt="docs-site-netlify-error" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/docs-site-netlify-error.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/08/docs-site-netlify-error.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/08/docs-site-netlify-error.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/docs-site-netlify-error.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="327" loading="lazy"><figcaption>Site de documentação do docusaurus quebrado no subdiretório</figcaption></figure><p><strong>OBSERVAÇÃO:</strong> nunca adicione as regras ao site da documentação e ao site principal ao mesmo tempo, pois isso causará um conflito de erros "TOO MANY REDIRECTS" (Muitos redirecionamentos).</p><p>Então, adicione as regras no site da documentação ou no site principal, mas nunca em ambos.</p><h2 id="vamos-responder-algumas-perguntas"><strong>Vamos responder algumas perguntas</strong></h2><p><strong>P:</strong> Por que é preferível usar o arquivo <em><em>netlify.toml</em></em> e não o arquivo <em><em>_redirects</em></em>?</p><p>Antes dessa alternativa, eu já tinha tentado a forma "fácil", que é o arquivo <em>_redirects</em>. Saiba, porém, que "não é tão fácil assim", porque você terá sempre que copiar o arquivo <em><em>_redirects para sua pasta </em></em><strong>build/</strong> ou <strong>public/</strong> ao construir seu site no Netlify.</p><p>Isso requer que você edite suas configurações de compilação do Netlify assim:</p><figure class="kg-card kg-code-card"><pre><code class="language-txt">npm run build &amp;&amp; cp _redirects public/</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;">arquivo netlify _redirects&nbsp;</font></figcaption></figure><p>Você também pode conseguir o proxy usando o arquivo <em><em>_redirects</em></em>. As regras precisam estar neste formato no site principal:</p><figure class="kg-card kg-code-card"><pre><code class="language-txt">/docs/* https://meu-site-de-documentacao.netlify.app/:splat 200</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;">arquivo netlify _redirects&nbsp;</font></figcaption></figure><p>e neste formato no site da documentação:</p><figure class="kg-card kg-code-card"><pre><code class="language-txt">/* https://siteprincipal.netlify.app/docs/:splat 301!</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;">arquivo netlify _redirects&nbsp;</font></figcaption></figure><p><strong>P:</strong> Por que é preferível usar URLs do Netlify em todas as regras de proxy ao invés de usar um URL de domínio personalizado?</p><p>Bem, a comunidade do Netlify aconselha sempre usar URLs do Netlify, pois é uma forma mais confiável de fazer esse redirecionamento.</p><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Parabéns 🎉! Que bom que você chegou ao final desse artigo.</p><p>Espero que você tenha aprendido algo novo hoje.</p><p>Agora é hora de fazer a implementação e de tornar a documentação do seu projeto mais profissional também, hospedando-a no subdiretório do seu site principal 👏.</p><p>Compartilhe este artigo para que outras pessoas possam vê-lo.</p><h2 id="recursos-"><strong>Recursos:</strong></h2><ul><li><a href="https://play.netlify.com/redirects">Playground de redirects da Netlify</a> (instruções em inglês)</li><li><a href="https://answers.netlify.com/t/support-guide-can-i-deploy-multiple-repositories-in-a-single-site/179">[Tutorial de Suporte] Posso implantar vários repositórios em um único site?</a> (em inglês)</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O método index() para listas em Python: como obter o índice de um item em uma lista ]]>
                </title>
                <description>
                    <![CDATA[ Existem várias técnicas que podemos usar para obter o índice de um item em uma lista em Python, como a função enumerate(), um laço for ou o método index(). Neste artigo, vamos nos concentrar em como obter o índice de um item em uma lista usando o método index(). Começaremos ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-metodo-index-para-listas-em-python-como-obter-o-indice-de-um-item-em-uma-lista/</link>
                <guid isPermaLink="false">62d5f161fea2f10707d66545</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Sun, 14 Aug 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/kelly-sikkema-377gw1wN0Ic-unsplash-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/list-indexof-for-python-how-to-get-the-index-of-an-item-in-a-list-with-index/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">List indexOf for Python? How to Get the Index of an Item in a List with .index()</a>
      </p><p>Existem várias técnicas que podemos usar para obter o índice de um item em uma lista em Python, como a função <code>enumerate()</code>, um laço <code>for</code> ou o método <code>index()</code>.</p><p>Neste artigo, vamos nos concentrar em como obter o índice de um item em uma lista usando o método <code>index()</code>.</p><p>Começaremos examinando a sintaxe desse método e, em seguida, veremos alguns exemplos para ajudá-lo a entender como usá-lo em seu código.</p><h2 id="qual-a-sintaxe-do-m-todo-index-em-python"><strong>Qual é a sintaxe do método <code>index()</code> em Python?</strong></h2><p>Para retornar o índice do item que estamos querendo saber, precisamos passar para o método <code>index()</code>, no mínimo, o parâmetro com o valor do item que estamos procurando. Esse, no entanto, não é o único parâmetro que podemos usar no método <code>index()</code>.</p><p>Veja como é a sintaxe completa:</p><pre><code class="language-txt">lista.index(item, inicio, fim)</code></pre><p>Aqui vemos um detalhamento dos parâmetros acima:</p><ul><li><code>item</code> é o valor do item cujo índice estamos querendo pesquisar.</li><li><code>inicio</code> é um parâmetro opcional que indica o ponto de partida na lista onde a pesquisa deve começar. Isso é bem útil quando temos um item repetido.</li><li><code>fim</code> indica o índice onde a pesquisa deve parar. Este parâmetro também é opcional.</li></ul><h2 id="como-obter-o-ndice-de-um-item-em-uma-lista-com-o-m-todo-index-"><strong>Como obter o índice de um item em uma lista com o método <code>.index()</code></strong></h2><p>Nesta seção, você verá como usar o método <code>index()</code> para obter o índice de um item em uma lista. Você também verá como usar todos os parâmetros.</p><p>Aqui está o primeiro exemplo:</p><pre><code class="language-python">listaDeNomes = ['Fulano', 'Fulana', 'DeTal', 'Ihechikara']

print(listaDeNomes.index('Fulana'))
# 1</code></pre><p>No código acima, criamos uma lista de nomes: <code>listaDeNomes = ['Fulano', 'Fulana', 'DeTal', 'Ihechikara']</code>.</p><p>E usando o método <code>index()</code>, obtivemos o índice de "Fulana" na lista: <code>listaDeNomes.index('Fulana')</code>.</p><p>Foi impresso no console o resultado da busca, que retornou o valor 1.</p><p>Caso você não entenda por que foi retornado 1, observe que listas são indexadas a partir de zero – então, o primeiro item tem o índice 0, o segundo tem o índice 1 e assim por diante. Fica assim:</p><p>'Fulano' =&gt; índice 0<br>'Fulana' =&gt; índice 1<br>'DeTal' =&gt; índice 2<br>'Ihechikara' =&gt; índice 3</p><h3 id="como-usar-os-par-metros-inicio-e-fim-com-o-m-todo-index-no-python"><strong>Como usar os parâmetros <code>inicio</code> e <code>fim</code> com o método <code>index()</code> no Python</strong></h3><p>Nesta seção, você verá como usar os parâmetros <code>inicio</code> e <code>fim</code> com o método <code>index()</code>. Vamos ao exemplo:</p><pre><code class="language-python">listaDeNomes = ['Fulano', 'Fulana', 'DeTal', 'Ihechikara', 'Fulano', 'Fulana', 'DeTal', 'Ihechikara']

print(listaDeNomes.index('Fulana', 2))
# 5</code></pre><p>Na lista acima, temos nomes com valores duplicados: <code>['Fulano', 'Fulana', 'DeTal', 'Ihechikara', 'Fulano', 'Fulana', 'DeTal', 'Ihechikara']</code>.</p><p>Mas queremos obter o índice do segundo item "Fulana". Sabendo que o índice do primeiro item "Fulana" é 1, então podemos iniciar a busca após esse item.</p><p>Para iniciar a busca após o primeiro item "Fulana", definimos o parâmetro <code>inicio</code> do método <code>index()</code>: <code>listaDeNomes.index("Fulana", 2)</code>. Agora, a pesquisa pelo índice de um item com o valor "Fulana" começará a partir do índice 2.</p><p>Recebemos o retorno com o valor 5 porque esse é o índice do segundo item "Fulana". Se não tivéssemos especificado um índice para <code>inicio</code>, o método <code>index()</code> teria retornado o primeiro índice encontrado desse valor.</p><p>Agora vou mostrar um exemplo para você entender como usar o parâmetro <code>fim</code>:</p><pre><code class="language-python">listaDeNomes = ['Fulano', 'Fulana', 'DeTal', 'Ihechikara', 'Fulano', 'Fulana', 'DeTal', 'Ihechikara']

print(listaDeNomes.index("Fulana", 2,4))
# ValueError: 'Fulana' is not in list</code></pre><p>Permanecemos com o índice 2 para o <code>inicio</code> e definimos o índice 4 para o parâmetro <code>fim</code>. Agora estamos procurando o índice de "Fulana" dentro do intervalo especificado (índice 2 e 4).</p><p>Recebemos um erro como retorno: <code>ValueError: 'Fulana' is not in list</code>. Isso ocorreu porque "Fulana" não está dentro do intervalo que especificamos.</p><p>Lembre-se de que começamos no índice 2, então a pesquisa foi feita em:</p><p>Índice 2 ( <code>inicio</code>) =&gt; 'DeTal'<br>Índice 3 =&gt; 'Ihechikara'<br>Índice 4 ( <code>fim</code>) =&gt; 'Fulano'</p><p>Nos índices acima, você pode ver que o valor "Fulana" não existe dentro do intervalo, portanto, foi retornado um erro.</p><p>Você recebe um erro <em><em>ValueError</em></em> em uma lista sempre que:</p><ul><li>O item procurado não existe na lista.</li><li>O item procurado não está dentro do intervalo de busca especificado (com <code>inicio</code> e <code>fim</code>).</li></ul><h2 id="resumo"><strong>Resumo</strong></h2><p>Neste artigo, falamos sobre o método <code>index()</code> em Python. Você o usa para encontrar o índice de um item em uma lista.</p><p>Vimos alguns exemplos que mostraram como usá-lo com ou sem os parâmetros <code>inicio</code> e <code>fim</code>.</p><p>Divirta-se com os códigos!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O que é abstração na programação – e por que ela é útil? ]]>
                </title>
                <description>
                    <![CDATA[ Você sabia que a abstração é um dos conceitos mais importantes para qualquer engenheiro de software saber? Isso mesmo! Sem o uso de abstração ao desenvolver novas tecnologias e conceitos, nunca teríamos sido capazes de inventar a maioria dos softwares ou mesmo a maioria das coisas. Por isso, entender esse ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-que-e-abstracao-em-programacao-e-por-que-ela-e-util/</link>
                <guid isPermaLink="false">62d383dffea2f10707d65c25</guid>
                
                    <category>
                        <![CDATA[ Programação ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Sun, 07 Aug 2022 18:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot--518--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/what-is-abstraction-in-programming/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is Abstraction in Programming – And Why is it Useful?</a>
      </p><p>Você sabia que a abstração é um dos conceitos mais importantes para qualquer engenheiro de software saber?</p><p>Isso mesmo!</p><p>Sem o uso de abstração ao desenvolver novas tecnologias e conceitos, nunca teríamos sido capazes de inventar a maioria dos softwares ou mesmo a maioria das coisas.</p><p>Por isso, entender esse conceito é realmente importante para o desenvolvimento de software.</p><h2 id="o-que-abstra-o-na-programa-o"><strong>O que é abstração na programação?</strong></h2><p>Você já usou a abstração de muitas formas, mas talvez não a conhecesse por esse termo.</p><p>O pensamento abstrato é uma das coisas que os humanos fazem em muitas áreas, como:</p><ul><li>Filosofia</li><li>Arte</li><li>Matemática</li><li>Ciência da Computação</li><li>e muitas outras…</li></ul><p>Mas o que ela é realmente? Você vai aprender tudo sobre ela neste artigo.</p><h2 id="o-que-vamos-abordar-"><strong>O que vamos abordar:</strong></h2><ol><li>Analogia da abstração</li><li>Exemplo de abstração em Python</li><li>Exemplo de abstração em Eletrônica Geral</li><li>Exemplo de abstração em Sistemas Embarcados</li><li>Por que é útil entender sobre abstração?</li></ol><h2 id="analogia-de-abstra-o"><strong>Analogia de abstração</strong></h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/pexels-torsten-dettlaff-70912.jpg" class="kg-image" alt="pexels-torsten-dettlaff-70912" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/pexels-torsten-dettlaff-70912.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/08/pexels-torsten-dettlaff-70912.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/08/pexels-torsten-dettlaff-70912.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/pexels-torsten-dettlaff-70912.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1250" loading="lazy"><figcaption>Foto criada por Torsten Dettlaff, extraída de Pexels: https://www.pexels.com/photo/black-coupes-70912/</figcaption></figure><p>Digamos que você esteja em uma autoescola para obter sua carteira de motorista.</p><p>Na autoescola, você aprende como os principais componentes do carro funcionam:</p><ul><li>Freios</li><li>Transmissão</li><li>Sistema de suspensão</li><li>Bateria</li></ul><p>Não é necessário entender cada componente em um nível técnico para aprender a dirigir.</p><p>Você precisa apenas de uma imagem mental do que os freios fazem quando você pressiona o pedal do freio, ou do que acontece na transmissão quando você muda de marcha... e assim por diante.</p><p>Você só precisa de uma representação básica do componente que está usando.</p><p>Em outras palavras, você só precisa de uma <strong><strong>abstração </strong></strong>daquele componente.</p><p>Nosso uso de abstrações para aprender e usar as coisas está em toda parte:</p><ul><li>Você não precisa conhecer completamente as partes de um carro para dirigi-lo. Saber como um carro funciona, porém, pode tornar você um <strong><strong>motorista melhor.</strong></strong></li><li>Você não precisa conhecer a engenharia das partes de uma bicicleta para saber como passear com ela. Saber como elas funcionam, porém, pode tornar você um <strong><strong>ciclista</strong> melhor<strong>.</strong></strong></li><li>Você não precisa conhecer os processos executados por uma função ou um framework para usá-los. Saber como essas coisas funcionam, porém, pode tornar você um <strong><strong>programador melhor.</strong></strong></li></ul><h2 id="exemplo-de-abstra-o-em-python"><strong>Exemplo de abstração em Python</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/code.png" class="kg-image" alt="code" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/code.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/code.png 716w" width="716" height="212" loading="lazy"></figure><p>Este é um código escrito em Python. Estamos apenas usando a função <code>print</code> para exibir o texto “Hello world” na tela.</p><p>Para fazer isso, você precisa apenas saber como usar a função <code>print</code>.</p><p>Você não precisa entender como ela funciona internamente.</p><p>Às vezes, contudo, é muito bom entender como uma determinada função trabalha internamente para usá-la de modo mais eficaz, ou até escolher qual função utilizar dentre funções similares.</p><p>Ao saber como ela funciona:</p><ul><li>Você se torna um programador melhor e entende o código de outras pessoas mais facilmente</li><li>Você entenderá com mais facilidade os bugs de qualquer biblioteca que usar</li><li>Ao invés de importar uma biblioteca inteira, você pode simplesmente copiar o código que precisar de outro projeto. Um projeto com menos dependências é sempre mais fácil de gerenciar</li></ul><p>Por exemplo, vamos dizer que você queira usar o <a href="https://docs.python.org/pt-br/3/library/statistics.html">módulo de estatísticas do Python</a>, que é um módulo integrado do Python. Isso significa que o Python já vem com esse módulo na sua biblioteca.</p><p>Você não precisará <a href="https://www.freecodecamp.org/news/how-to-use-pip-install-in-python/">importá-lo com o comando PIP</a> (texto em inglês).</p><p>Vamos supor que eu queira usar somente a <a href="https://docs.python.org/pt-br/3/library/statistics.html#statistics.mean">função de média (mean)</a>:</p><figure class="kg-card kg-code-card"><pre><code>from statistics import mean 

randomList = [-1.0, 2.5, 3.25, 5.75]

print(mean(randomList))</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">main.py</font></font></figcaption></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/python-example.png" class="kg-image" alt="python-example" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/python-example.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/08/python-example.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/python-example.png 1040w" sizes="(min-width: 720px) 720px" width="1040" height="446" loading="lazy"></figure><p>Se não houver dados na função, será retornado o erro <a href="https://docs.python.org/pt-br/3/library/statistics.html#statistics.StatisticsError">Statistics.error</a>.</p><p>O código acima exibirá o valor de 2.625.</p><p>Como ele fez esse trabalho internamente?</p><p>Se você ver o código desse módulo, que está em <a href="https://github.com/python/cpython/blob/main/Lib/statistics.py">https://github.com/python/cpython/blob/main/Lib/statistics.py</a>, você encontrará na linha 414 o código para a função de média (mean):</p><pre><code class="language-python">def mean(data):
    """
    Return the sample arithmetic mean of data.
    &gt;&gt;&gt; mean([1, 2, 3, 4, 4])
    2.8
    &gt;&gt;&gt; from fractions import Fraction as F
    &gt;&gt;&gt; mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])
    Fraction(13, 21)
    &gt;&gt;&gt; from decimal import Decimal as D
    &gt;&gt;&gt; mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])
    Decimal('0.5625')
    If ``data`` is empty, StatisticsError will be raised.
    """
    T, total, n = _sum(data)
    if n &lt; 1:
        raise StatisticsError('mean requires at least one data point')
    return _convert(total / n, T)
    
    
 </code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/https-__github.com_python_cpython_blob_main_Lib_statistics.py.png" class="kg-image" alt="https-__github.com_python_cpython_blob_main_Lib_statistics.py" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/https-__github.com_python_cpython_blob_main_Lib_statistics.py.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/08/https-__github.com_python_cpython_blob_main_Lib_statistics.py.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/https-__github.com_python_cpython_blob_main_Lib_statistics.py.png 1418w" sizes="(min-width: 720px) 720px" width="1418" height="986" loading="lazy"></figure><p>Esse é o código interno que é executado quando você usa o módulo de estatísticas integrado fornecido pelo Python.</p><p>Ele executa a função <em>_sum</em> (soma), que retorna o tipo, o total da soma e a quantidade de itens somados. Se o número de itens for menor que 1, ele retorna o erro. Caso seja igual ou maior, ele utiliza a função de conversão (<em>_convert</em>) para dividir o total pela quantidade de itens, formatados no tipo identificado.</p><p>É bom entender como as coisas funcionam, certo? Agora, vamos para um exemplo mais "físico".</p><h2 id="exemplo-de-abstra-o-em-eletr-nica-geral"><strong>Exemplo de abstração em Eletrônica Geral</strong></h2><p>Qualquer dispositivo eletrônico é feito de circuitos.</p><p>Os circuitos são feitos por muitos fios e componentes. São os engenheiros eletrônicos que projetam esses dispositivos.</p><p>Na faculdade de engenharia elétrica (ou similares), o estudante não apenas aprende como projetar circuitos, mas também aprende a física por trás de cada componente que compõe um circuito.</p><p>Depois da faculdade, muitos engenheiros elétricos trabalham desenvolvendo pequenos circuitos eletrônicos para calculadoras, micro-ondas, impressoras e outros dispositivos.</p><p>Porém, enquanto os engenheiros elétricos trabalham para fazer os circuitos, compostos por componentes e fios, quem trabalha para fazer os componentes?</p><p>Bem, geralmente alguns engenheiros elétricos, de materiais, físicos aplicados e outros.</p><p>No nosso exemplo, usaremos os físicos aplicados – que são cientistas que aplicam a física para resolver problemas técnicos difíceis.</p><p>Alguns deles focam no estudo e criação desses componentes usados ​​nos circuitos.</p><p>Outros se preocupam em desenvolver coisas que se tornam os blocos de construção dos circuitos como:</p><ul><li>LEDs</li><li>Visores LCD</li><li>Capacitores</li><li>Resistores</li></ul><p>Os engenheiros elétricos, então, desenvolvem os circuitos e aplicações eletrônicas com esses componentes feitos pelos físicos.</p><p>Eles não se preocupam com o mesmo nível de detalhe que os físicos têm sobre a composição desses componentes.</p><p>O que eles se preocupam é usar esses materiais para resolver problemas em nível eletrônico.</p><p>Isso é a abstração!</p><p>O físico aplicado foca no nível de abstração, onde os componentes são criados, com quais materiais, qual o tempo necessário para criá-los e assim por diante.</p><p>O engenheiro elétrico se concentra no nível de abstração, de onde os componentes são usados ​​para criar os circuitos e dispositivos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/abstraction.drawio.png" class="kg-image" alt="abstraction.drawio" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/abstraction.drawio.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/abstraction.drawio.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/abstraction.drawio.png 1600w" sizes="(min-width: 720px) 720px" width="1600" height="1398" loading="lazy"><figcaption>No que trabalha cada profissional?</figcaption></figure><p>Ficou mais claro agora? Então vamos agora para os sistemas embarcados.</p><h2 id="exemplo-de-abstra-o-em-sistemas-embarcados">Exemplo de abstração em sistemas embarcados</h2><p>Um engenheiro de sistemas embarcados (engenheiros que criam pequenos sistemas de computador, que são completos e independentes, encarregados de executar apenas uma função pré-determinada, como uma torradeira, calculadora científica, mouse, teclado e assim por diante) precisa saber como programar próximo ao hardware.</p><p>Para fazer isso, esses engenheiros precisam ter um bom entendimento das linguagens C e Assembly, uma vez que estão intimamente relacionadas entre si.</p><p>Temos como exemplo sistemas embarcados críticos (aplicações em tempo real que processam dados e eventos que possuem restrições de tempo definidas criticamente) como:</p><ul><li>Dispositivos médicos</li><li>Sistemas de controle de aviões</li><li>Sistemas de orientação de mísseis</li></ul><p>Um engenheiro precisa entender C e Assembly. O Assembly normalmente é usado em funções muito específicas, quando o Assembly puro executa melhor o trabalho que um código C compilado.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-6.png" class="kg-image" alt="image-6" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/image-6.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/image-6.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="717" loading="lazy"><figcaption><strong><strong><em><em>Exemplo de diferentes níveis de abstração</em></em></strong></strong></figcaption></figure><p>Cada caixa é um nível diferente de abstração.</p><p>Esses componentes elétricos são feitos e estudados por físicos aplicados, engenheiros de materiais e alguns engenheiros elétricos.</p><p>Já os componentes de software (funções, classes) são usados ​​e criados pelos programadores de sistemas embarcados.</p><h2 id="por-que-til-entender-sobre-abstra-o"><strong>Por que é útil entender sobre abstração?</strong></h2><p>Compreender a abstração permite que você entenda quando precisa saber algo mais técnico sobre algo ou quando é suficiente saber apenas como usá-lo.</p><p>Outra razão para entender bem a abstração é quando você começa a aprender um framework fora da sua área de trabalho.</p><p>Quando você aprende um framework pela primeira vez, você aprende como usá-lo. À medida que você aprende como ele funciona internamente, você começa a entender seus limites.</p><p>Como resultado, você aprende como as classes e funções são realmente escritas.</p><p>Ao compreender bibliotecas, frameworks e outros aspectos da programação, em um nível avançado, você será capaz de criar suas próprias bibliotecas e frameworks.</p><p>Desse modo, você poderá progredir na carreira e pode até ser capaz de resolver problemas difíceis.</p><p>Reduzir dependências em um projeto é outro motivo para entender a abstração.</p><p>Ao usar algumas funções de uma biblioteca externa, você pode ver como o código é escrito e simplesmente substituir a utilização dela por uma função ou classe sua.</p><p>Desse modo, seu projeto fica com menos dependências, facilitando que as pessoas executem seu código sem precisar instalar outras dependências.</p><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Obrigado pela leitura! Agora você sabe:</p><ul><li>O que é abstração</li><li>Três exemplos de abstração: em Python, em eletrônica geral e em sistemas embarcados</li><li>Por que é útil entender sobre abstração</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Strings em JavaScript - Formatando Strings em JS ]]>
                </title>
                <description>
                    <![CDATA[ O JavaScript tem muitos métodos que você pode usar para formatar strings. Neste artigo, mostrarei alguns dos métodos mais usados. Vale ressaltar que os métodos de string toUpperCase, toLowerCase, replace e trim  abaixo não alteram a string original, mas retornam uma nova string formatada de um modo específico. > ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/strings-em-javascript-formatando-strings-em-js/</link>
                <guid isPermaLink="false">62d3344bfea2f10707d65996</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Sun, 07 Aug 2022 18:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/cappa.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/javascript-string-format-how-to-format-strings-in-js/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript String Format – Formatting Strings in JS</a>
      </p><p>O JavaScript tem muitos métodos que você pode usar para formatar strings. Neste artigo, mostrarei alguns dos métodos mais usados.</p><p>Vale ressaltar que os métodos de string <code>toUpperCase</code>, <code>toLowerCase</code>, <code>replace</code> e <code>trim</code> abaixo não alteram a string original, mas retornam uma nova string formatada de um modo específico.</p><blockquote>Nota do tradutor: como curiosidade: o JavaScript conta as posições sempre a partir de zero, como se fosse um array de caracteres.</blockquote><h2 id="como-usar-o-m-todo-tolowercase-"><strong>Como usar o método <code>toLowerCase()</code></strong></h2><p>Como o nome indica, você usa o método <code>toLowerCase()</code> para converter strings em sua versão em letras minúsculas.</p><p>O que ele faz é pegar a string original e retornar uma nova string, toda em letras minúsculas.</p><p>Aqui temos um exemplo:</p><pre><code class="language-js">const string = "HeLLo woRld"

const lowercase = string.toLowerCase()

console.log(string)
// HeLLo woRld

console.log(lowercase)
// hello world
</code></pre><p>Como você pode ver, a nova string tem todas as letras minúsculas.</p><h2 id="como-usar-o-m-todo-touppercase-"><strong>Como usar o método <code>toUpperCase()</code></strong></h2><p>Parecido com o primeiro método, <code>toUpperCase</code> é usado para converter uma strings na sua versão em letras maiúsculas.</p><p>Aqui vemos um exemplo:</p><pre><code class="language-js">const string = "HeLLo woRld"

const uppercase = string.toUpperCase()

console.log(string)
// HeLLo woRld

console.log(uppercase)
// HELLO WORLD
</code></pre><p>Usando a string original, ele retorna uma nova string em letras maiúsculas.</p><h2 id="como-usar-o-m-todo-replace-"><strong>Como usar o método <code>replace()</code></strong></h2><p>Você usa o método <code>replace</code> para substituir uma parte de uma string por uma substring. Desse modo, você formatará a string para poder modificá-la.</p><p>Veja um exemplo de como o método <code>replace</code> funciona:</p><pre><code class="language-js">const string = "Hello world"

const modificado = string.replace("world", "developers")

console.log(string)
// Hello world

console.log(modificado)
// Hello developers
</code></pre><p>O método <code>replace</code>, como visto acima, substituiu a substring "world" por "developers".</p><p>Você também pode usar uma expressão regular, geralmente chamada pela abreviação <em><em>Regex</em></em> (por conta do inglês, <em><em>Regular Expression</em></em>) no lugar de uma string como substituto. Veja aqui um exemplo:</p><pre><code class="language-js">const string = "Hello world"

const modificado = string.replace(/o/g, "--")

console.log(string)
// Hello world

console.log(modificado)
// Hell-- w--rld
</code></pre><p>Usando um padrão <em>regex</em> para corresponder ao caractere "o" de forma global (representado pela tag <em><em>g</em></em>), você pode ver a string modificada contendo hifens duplos no lugar do "o" na string.</p><p>Observação: expressões regulares são escritas sem aspas.</p><h2 id="como-usar-o-m-todo-trim-"><strong>Como usar o método <code>trim()</code></strong></h2><p>O método <code>trim</code> modifica uma cópia da string removendo os espaços em branco do início e do fim de uma string.</p><p>Aqui está um exemplo:</p><pre><code class="language-js">const string = "  H ell  o world  "

const modificado = string.trim()

console.log(string)
//   H ell  o world 

console.log(modificado)
// H ell  o world
</code></pre><p>Você pode ver que apenas os espaços no início e no final são removidos. Os espaços entre as letras permaneceram.</p><p>Ele também considera como sendo espaço em branco as tabulações, linhas de quebra e assim por diante.</p><blockquote>Nota do tradutor: abaixo, vemos alguns outros métodos acrescidos ao texto original.</blockquote><h2 id="como-usar-o-m-todo-repeat-"><strong>Como usar o método <code>repeat()</code></strong></h2><p>Como o nome indica, o método <code>repeat()</code> utiliza a string original para retornar uma nova string, repetindo-a quantas vezes você definir.</p><p>Esse é um exemplo de como utilizá-lo:</p><pre><code class="language-js">const string = "Hello World! "

const modificado = string.repeat(3)

console.log(string)
// Hello World! 

console.log(modificado)
// Hello World! Hello World! Hello World!</code></pre><h2 id="como-usar-o-m-todo-split-"><strong>Como usar o método <code>split()</code></strong></h2><p>Já no método <code>split()</code>, você utiliza o conteúdo da string original, cortando-a sempre que aparecer um caractere ou uma string que desejar, transformando-a assim em um array de substring.</p><p>Se você usar um espaço <code>" "</code>, como separador, a string será cortada por palavra. E caso a string separadora seja vazia <code>""</code>, ela separará por caractere (incluindo o espaço). </p><p>Aqui está um exemplo:</p><pre><code class="language-js">const string = "How are you doing today?"

const modificado = string.split(" ")

console.log(string)
// How are you doing today? 

console.log(modificado)
// ["How","are","you","doing","today?"]</code></pre><h2 id="como-usar-o-m-todo-concat-"><strong>Como usar o método <code>concat()</code></strong></h2><p>O método <code>concat()</code> é utilizado para unir strings. Você utiliza o primeiro parâmetro para definir o caractere de união. Os outros são as strings que deseja unir à principal.</p><p>Esse método pode ser usado substituindo o operador de mais (+).</p><p>Aqui está um exemplo:</p><pre><code class="language-js">const string = "How"

const modificado = string.concat(" ","are","you","doing","today?")

const comOperador = string + " " + "are" + " " + "you" + " " + "doing" + " " + "today?"

console.log(string)
// How 

console.log(modificado)
// How are you doing today?

console.log(comOperador)
// How are you doing today?
</code></pre><h2 id="como-extrair-parte-da-string-usando-os-m-todos-slice-substr-e-substring-"><strong>Como extrair parte da string usando os métodos <code>slice()</code> <code>substr()</code> e <code>substring()</code></strong></h2><p>Há três métodos para extrair apenas uma parte da string original. Eles são os métodos: &nbsp;<code>slice()</code>, &nbsp;<code>substr()</code> e &nbsp;<code>substring()</code></p><p>Vamos ver cada um deles!</p><p>O método <code>slice()</code> possui dois parâmetros, sendo eles a posição inicial, onde você quer iniciar a extração, e a posição final, onde terminá-la.</p><p>É importante lembrar que esse método captura apenas até o caractere anterior à posição final. Se um parâmetro for negativo, a posição é contada a partir do final da string.</p><p>Aqui está um exemplo de como ele funciona:</p><pre><code class="language-js">const string = "Hello World!"

const extraido = string.slice(7,12)

const negativo = string.slice(-6,-1)

console.log(string)
// Hello World! 

console.log(extraido)
// World

console.log(negativo)
// World</code></pre><p>O método <code>substring()</code> possui a única diferença em relação ao <code>slice()</code> de que qualquer parâmetro menor que zero é tratado como zero. Desse modo, temos que:</p><pre><code class="language-js">const string = "Hello World!"

const extraido = string.substring(7,12)

const negativo = string.substring(-6)

console.log(string)
// Hello World! 

console.log(extraido)
// World

console.log(negativo)
// Hello World!</code></pre><p>O método <code>substr()</code>, por sua vez, possui a diferença em relação ao <code>slice()</code> de que o segundo parâmetro refere-se a quantidade de caracteres capturados a partir da posição inicial.</p><p>Aqui temos um exemplo:</p><pre><code class="language-js">const string = "Hello World!"

const extraido = string.substr(7,5)

const negativo = string.substr(-6, 5)

console.log(string)
// Hello World! 

console.log(extraido)
// World

console.log(negativo)
// World</code></pre><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Existem mais alguns métodos de strings em JavaScript. Contudo, esses são os mais usados para buscas e verificações, quando há, por exemplo, uma string dentro de outra string, a localização da primeira ou da última ocorrência e assim por diante.</p><p>Saiba mais sobre <a href="https://dillionmegida.com/p/10-useful-string-methods-in-javascript/">métodos úteis de string no JavaScript aqui</a> (texto em inglês).</p><p>Obrigado pela leitura e bons estudos!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
