<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: JOÃO PSTER</title>
    <description>The latest articles on Forem by JOÃO PSTER (@jpster).</description>
    <link>https://forem.com/jpster</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F845634%2F9da97410-4a1c-4483-b32d-6836ced618bf.png</url>
      <title>Forem: JOÃO PSTER</title>
      <link>https://forem.com/jpster</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jpster"/>
    <language>en</language>
    <item>
      <title>"Customer Obsession" Explicado - Princípios de Liderança da Amazon (Amazon LPs)</title>
      <dc:creator>JOÃO PSTER</dc:creator>
      <pubDate>Thu, 10 Jul 2025 13:34:24 +0000</pubDate>
      <link>https://forem.com/jpster/customer-obsession-explicado-principios-de-lideranca-da-amazon-amazon-lps-3jod</link>
      <guid>https://forem.com/jpster/customer-obsession-explicado-principios-de-lideranca-da-amazon-amazon-lps-3jod</guid>
      <description>&lt;h2&gt;
  
  
  Princípios de Liderança (ou LP)
&lt;/h2&gt;

&lt;p&gt;Neste tópico apresento a &lt;strong&gt;explicação detalhada e direto ao ponto&lt;/strong&gt; do princípio de "Customer Obsession" da Amazon.&lt;/p&gt;

&lt;p&gt;Eu assisti detalhadamente o &lt;a href="https://www.youtube.com/watch?v=My-2-MyxamQ" rel="noopener noreferrer"&gt;vídeo&lt;/a&gt; do CEO &lt;em&gt;Andy Jassy&lt;/em&gt; explicando cada um dos princípios de liderança, e vou passar para vocês a explicação detalhada do que significa cada um dos princípios.&lt;/p&gt;

&lt;p&gt;Para encontrar os outros princípios, confira minha página aqui no LeetCode ou no LinkedIn, no fim deste artigo também terá links para os outros princípios quando eu os postar.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que são os princípios de liderança da Amazon?
&lt;/h3&gt;

&lt;p&gt;Primeiro, entenda o que é &lt;strong&gt;princípios&lt;/strong&gt;, no âmbito cultural significa &lt;strong&gt;valores fundamentais e crenças&lt;/strong&gt; que orientam o comportamento, tradição e práticas de um indivíduo e sociedade, no mundo dos negócios significa &lt;strong&gt;diretrizes estratégicas e valores organizacionais&lt;/strong&gt; que guiam decisões e operações.&lt;/p&gt;

&lt;p&gt;Ou seja, &lt;strong&gt;princípios&lt;/strong&gt; são as regras base que moldam a forma como nós comportamos e agimos para tomar decisões e viver, tanto culturalmente como empresarialmente, orientando comportamentos e estabelecendo padrões de conduta.&lt;/p&gt;

&lt;p&gt;Os princípios de liderança da Amazon são exatamente isso, regras base que moldam como um &lt;em&gt;amazonier&lt;/em&gt; (funcionário da Amazon) deve se comportar em suas decisões e operações.&lt;/p&gt;

&lt;h3&gt;
  
  
  Customer Obsession (Obsessão pelo Cliente)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Leaders start with the customer and work backwards. They work vigorously to earn and keep customer trust. Although leaders pay attention to competitors, they obsess over customers.&lt;/p&gt;

&lt;p&gt;Líderes começam com o cliente e trabalham de trás para frente. Eles se esforçam vigorosamente para ganhar e manter a confiança do cliente. Embora líderes prestem atenção aos concorrentes, eles são obcecados pelos clientes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Introdução
&lt;/h4&gt;

&lt;p&gt;Ser obcecado pelo cliente significa sempre começar novos projetos a partir da visão do cliente, também significa que sempre ao discutir uma decisão, pensar no que seria melhor para o cliente, sempre, isso mesmo, sempre!&lt;/p&gt;

&lt;p&gt;Líderes obcecados pelo cliente trabalham de forma regressiva, eles começam na visão do cliente, e regressivamente vão construindo documentos sobre o que eles pretendem criar até chegar na solução de código.&lt;/p&gt;

&lt;p&gt;Código &amp;lt;-- Press Release &amp;lt;-- Documentação Regressiva &amp;lt;-- Cliente (Começa Aqui)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Em algumas empresas principalmente em ideias que dão princípio a startups, uma pessoa analisa um problema na sociedade, cria uma solução e depois com um MVP tenta ver se a solução atende ao cliente, na Amazon o processo é feito reversamente, começa no cliente, estuda se isso realmente atende ele e só depois é feita a solução.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Líderes obcecados pelo cliente sempre trabalham vigorosamente para ganhar e manter a confiança do cliente, e mesmo que sempre se deve observar seus competidores, eles são mais focados em atender as expectativas que eles sabem que os clientes deles têm.&lt;/p&gt;

&lt;h4&gt;
  
  
  Walk that Walk
&lt;/h4&gt;

&lt;p&gt;Na Amazon quando se diz que tudo tem a ver com o cliente, não é para fazer &lt;a href="https://pt.wikipedia.org/wiki/Greenwashing" rel="noopener noreferrer"&gt;&lt;em&gt;Greenwashing&lt;/em&gt;&lt;/a&gt; ou em termos mais técnicos &lt;em&gt;Marketing de Causa Superficial&lt;/em&gt;, é de verdade!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Andy Jassy&lt;/em&gt; CEO da Amazon cita que foi esse um dos motivos que o atraiu para a Amazon &lt;strong&gt;26 anos atrás&lt;/strong&gt;, e de acordo com o relato dele desde quando ele entrou até hoje, tudo é focado no cliente, desde o começo da empresa até hoje, na Amazon, somos obcecados pelo cliente.&lt;/p&gt;

&lt;h4&gt;
  
  
  Exemplos Reais
&lt;/h4&gt;

&lt;p&gt;Todos nós somos clientes de algum lugar, e todos nós sabemos como queremos ser tratados, e também sabemos que muitos locais dizem ser focados no cliente, mas não são de verdade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Avaliações reais de livros (Early 90s)&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Andy Jassy&lt;/em&gt; cita que muitos anos atrás, houve um debate para decidir se colocavam ou não avaliações de pessoas reais nos livros vendidos na plataforma, ele cita que as editoras não queriam que isso fosse colocado por que poderiam ter avaliações negativas e isso poderia afetar as vendas, mas a decisão deles foi colocar sim as avaliações, pois com avaliações reais e sinceras &lt;strong&gt;os clientes poderiam tomar a melhor decisão para eles&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pandemia de COVID 19&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Andy Jassy&lt;/em&gt; também cita que durante a pandemia de COVID 19 muitas empresas tentaram sugar o máximo de dinheiro possível de seus clientes para sobreviver, ao mesmo tempo que tentavam enxugar o máximo de custos, mas a Amazon fez o contrário, em vez de sugar seus clientes, a AWS ativamente buscou formas de &lt;strong&gt;economizar dinheiro dos seus clientes AWS para que eles pudessem sobreviver a esse tempo difícil e reinvestir esse dinheiro onde seria melhor para eles no futuro&lt;/strong&gt;, nas palavras de Andy: "Cost-optimize for customers where they can save money, to redeploy that money in the future".&lt;/p&gt;

&lt;h4&gt;
  
  
  Como isso funciona no Dia a Dia
&lt;/h4&gt;

&lt;p&gt;Na Amazon nem uma única linha de código é escrita sem antes ter feito um trabalho regressivo de documentação da necessidade do cliente e uma press release para validar que vão construir um produto que realmente vai funcionar e atender as necessidades do cliente, sempre buscando responder às perguntas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What problem are we trying to solve?"&lt;/li&gt;
&lt;li&gt;"What will customers care most about?"&lt;/li&gt;
&lt;li&gt;"What would they be most disappointed about?"&lt;/li&gt;
&lt;li&gt;"What will they love most?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O processo sempre segue o fluxo:&lt;br&gt;
Código &amp;lt;-- Press Release &amp;lt;-- Documentação Regressiva &amp;lt;-- Cliente (Começa Aqui)&lt;/p&gt;

&lt;p&gt;Onde:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cliente: Começa avaliando a dor do cliente, responde-se às 4 perguntas citadas anteriormente.&lt;/li&gt;
&lt;li&gt;Documentação Regressiva: Documenta as respostas das perguntas, faz análises e coleta informações de qual seriam as melhores formas de resolver a dor do cliente, qual seria a melhor experiência do cliente, o que se sabe sobre o que o cliente quer, e monta-se uma solução ideal.&lt;/li&gt;
&lt;li&gt;Press Release: É feito um &lt;a href="https://pt.wikipedia.org/wiki/Comunicado_de_imprensa" rel="noopener noreferrer"&gt;comunicado à imprensa&lt;/a&gt; para validar que aquela solução realmente vai atender a dor do cliente.&lt;/li&gt;
&lt;li&gt;Código: Por fim, depois de confirmado e validado, é iniciado a criação da solução em código.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Como competitividade e questões econômicas se encaixam nesse princípio
&lt;/h4&gt;

&lt;p&gt;Algumas pessoas podem se confundir ao tentar entender como competitividade e questões econômicas podem se encaixar nesse princípio, mas é bem simples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Questões Econômicas&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Andy Jassy&lt;/em&gt; relembra de um acontecimento com a empresa &lt;strong&gt;Costco&lt;/strong&gt; em meados dos anos 2000, quando eles propuseram uma entrega rápida de uma hora para qualquer produto da loja, mas essa proposta tinha um problema, ela não era economicamente viável, e a Costco veio a encerrar as entregas rápidas meses depois, &lt;strong&gt;quebrando a confiança do cliente&lt;/strong&gt;, pois eles criaram uma expectativa grande nos clientes e não conseguiram manter, ferindo este princípio de liderança, então se atentar a questões econômicas está dentro dos parâmetros que precisam ser atendidos para cumprir com esse princípio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Competitividade&lt;/strong&gt;&lt;br&gt;
Se você está tentando criar a melhor experiência possível para o seu cliente, você tem que estar atento ao que seus concorrentes oferecem para eles, e se os competidores oferecem algo que você não oferece ainda, sempre esteja atento, se inspire na solução do concorrente e pense em como melhorar a experiência do seu cliente com o que você aprendeu dos seus competidores, sejam falhas, ou acertos.&lt;/p&gt;

&lt;p&gt;Nas palavras de Andy Jassy: "Think how we can improve our own customer experience with what we learn from what competitors have done".&lt;/p&gt;

&lt;p&gt;Mas primeiro, gaste mais tempo focado em &lt;strong&gt;o que você sabe&lt;/strong&gt; que seus clientes gostariam, isso está conectado com o princípio do &lt;strong&gt;Are Right, A Lot&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;Para finalizar, deixo a frase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Everybody at this company has not just the freedom but really the expectation to look at what customers want and figure out how we can be better and better for them every day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Acesse minhas redes: &lt;a href="https://leetcode.com/u/JoaoPster/" rel="noopener noreferrer"&gt;LeetCode&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCZDR6EKNW8zO6HDOHOdtlFQ" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; e &lt;a href="https://www.linkedin.com/in/ojoaopster/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>aws</category>
    </item>
    <item>
      <title>"Ownership" na Prática: Princípios de Liderança da Amazon Explicados</title>
      <dc:creator>JOÃO PSTER</dc:creator>
      <pubDate>Thu, 10 Jul 2025 13:33:18 +0000</pubDate>
      <link>https://forem.com/jpster/ownership-na-pratica-principios-de-lideranca-da-amazon-explicados-n2o</link>
      <guid>https://forem.com/jpster/ownership-na-pratica-principios-de-lideranca-da-amazon-explicados-n2o</guid>
      <description>&lt;h2&gt;
  
  
  Princípios de Liderança da Amazon: Ownership (Senso de Propriedade)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Introdução aos Princípios de Liderança
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;O que são princípios?&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No âmbito cultural&lt;/strong&gt;: Valores fundamentais e crenças que orientam nosso comportamento e tradições&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No mundo dos negócios&lt;/strong&gt;: Diretrizes estratégicas que guiam decisões e operações&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Os &lt;strong&gt;princípios de liderança da Amazon&lt;/strong&gt; são as regras fundamentais que moldam como um &lt;em&gt;amazonier&lt;/em&gt; (funcionário da Amazon) deve se comportar em suas decisões e operações diárias.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Este artigo é baseado na explicação detalhada do CEO Andy Jassy em &lt;a href="https://www.youtube.com/watch?v=My-2-MyxamQ" rel="noopener noreferrer"&gt;vídeo oficial&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  O Princípio: Ownership ("Senso de Propriedade")
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Definição Oficial
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;"Leaders are owners. They think long term and don't sacrifice long-term value for short-term results. They act on behalf of the entire company, beyond just their own team. They never say 'that's not my job.'"&lt;/p&gt;

&lt;p&gt;"Líderes são donos. Pensam a longo prazo e não sacrificam o valor a longo prazo por resultados de curto prazo. Agem em nome de toda a empresa, além de sua própria equipe. Nunca dizem 'este não é meu trabalho'."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  O que Significa na Prática?
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Ownership&lt;/strong&gt; significa &lt;strong&gt;agir como se você fosse o dono&lt;/strong&gt; daquilo que está sob sua responsabilidade. É pensar: &lt;em&gt;"E se fosse o meu dinheiro em jogo?"&lt;/em&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Os 3 Pilares do Ownership:
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;🎯 Visão de Longo Prazo&lt;/strong&gt;: Nunca sacrificar resultados duradouros por ganhos imediatos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🏢 Pensamento Holístico&lt;/strong&gt;: Trabalhar pelo bem de toda a empresa, não apenas da sua equipe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🚀 Proatividade Total&lt;/strong&gt;: Jamais dizer "isso não é meu trabalho"&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Ownership Como Mindset
&lt;/h3&gt;

&lt;p&gt;Mais que um princípio, &lt;strong&gt;Ownership é uma mentalidade&lt;/strong&gt; - uma forma de pensar que se reflete diretamente em nossas atitudes. Segundo Andy Jassy, este é o princípio mais conectado com &lt;strong&gt;comportamentos práticos&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Características de quem tem Ownership:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Assume responsabilidade sem precisar ser lembrado&lt;/li&gt;
&lt;li&gt;✅ Pensa no negócio de forma holística&lt;/li&gt;
&lt;li&gt;✅ Foca em soluções de longo prazo&lt;/li&gt;
&lt;li&gt;✅ Vai além das responsabilidades básicas do cargo&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Exemplos Práticos Para Entender
&lt;/h3&gt;

&lt;h4&gt;
  
  
  📍 Exemplo 1: Locatários vs. Proprietários no Natal
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;A Situação&lt;/strong&gt;: Nos EUA, alguns locatários fixam árvores de Natal diretamente no piso de madeira das casas alugadas, danificando o assoalho.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Lição&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Locatário&lt;/strong&gt; (sem ownership): Prioriza a facilidade imediata&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proprietário&lt;/strong&gt; (com ownership): Pensa no impacto a longo prazo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Aplicação no Trabalho&lt;/strong&gt;: Um líder com ownership sempre considera as consequências futuras de suas decisões, não apenas os resultados imediatos.&lt;/p&gt;

&lt;h4&gt;
  
  
  📍 Exemplo 2: O Jovem Funcionário da Loja
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;A Situação&lt;/strong&gt;: Andy Jassy conversou com um jovem funcionário e perguntou: &lt;em&gt;"Você teria alguma ideia sobre como aumentar as vendas da loja?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Resposta&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Isso não é meu trabalho"&lt;/li&gt;
&lt;li&gt;"Eu não seria pago a mais por isso"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;O Problema&lt;/strong&gt;: Esta resposta demonstra &lt;strong&gt;ausência total de ownership&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Lição&lt;/strong&gt;: Quem tem ownership:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Busca constantemente maneiras de agregar valor&lt;/li&gt;
&lt;li&gt;Entende que o sucesso da empresa beneficia sua própria carreira&lt;/li&gt;
&lt;li&gt;Não se limita às responsabilidades básicas do cargo&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Como Aplicar Ownership na Prática
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ✅ O que a Amazon Espera:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pessoas que se sentem e agem como donos&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pessoas que pensam nos problemas de forma holística&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pessoas que encontram soluções&lt;/strong&gt;: Quando veem um problema, procuram o responsável para resolvê-lo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pessoas que garantem execução&lt;/strong&gt;: Fazem de tudo para que as coisas sejam concluídas e funcionem&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  🎯 Comportamentos Esperados:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Diante de problemas complexos&lt;/strong&gt;: Não empurram para outros, mas montam equipes com as pessoas certas e buscam resolver aquele problema da melhor forma possivel para o cliente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visão ampla&lt;/strong&gt;: Pensam muito além de suas próprias equipes
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foco no cliente&lt;/strong&gt;: Sempre consideram o impacto no cliente final&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistência&lt;/strong&gt;: Garantem que problemas tenham um caminho para resolução&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Frase de Reflexão
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Everybody at this company has not just the freedom but really the expectation to look at what customers want and figure out how we can be better and better for them every day."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;"Todos nesta empresa têm não apenas a liberdade, mas realmente a expectativa de olhar para o que os clientes querem e descobrir como podemos ser cada vez melhores para eles todos os dias."&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  📚 Resumo para Fixação
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;OWNERSHIP EM 5 PONTOS-CHAVE:&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🏠 Aja como dono&lt;/strong&gt;: Pense "e se fosse meu dinheiro/negócio?"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;⏰ Visão de longo prazo&lt;/strong&gt;: Nunca sacrifique resultados duradouros por ganhos imediatos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🌍 Pensamento holístico&lt;/strong&gt;: Trabalhe pelo bem de toda a empresa, não só da sua equipe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🚀 Proatividade total&lt;/strong&gt;: Nunca diga "isso não é meu trabalho"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🎯 Foco na solução&lt;/strong&gt;: Encontre problemas, busque responsáveis e garanta que sejam resolvidos&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;PERGUNTA PARA REFLEXÃO:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;"Estou agindo como se esta empresa fosse minha? Minhas decisões consideram o longo prazo e o bem de toda a organização?"&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Acesse minhas redes:&lt;/strong&gt; &lt;a href="https://leetcode.com/u/JoaoPster/" rel="noopener noreferrer"&gt;LeetCode&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCZDR6EKNW8zO6HDOHOdtlFQ" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; e &lt;a href="https://www.linkedin.com/in/ojoaopster/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>aws</category>
    </item>
    <item>
      <title>JavaScript Map - Explicação detalhada, casos e exemplos de uso</title>
      <dc:creator>JOÃO PSTER</dc:creator>
      <pubDate>Wed, 09 Jul 2025 20:38:23 +0000</pubDate>
      <link>https://forem.com/jpster/javascript-map-explicacao-detalhada-casos-e-exemplos-de-uso-1h0j</link>
      <guid>https://forem.com/jpster/javascript-map-explicacao-detalhada-casos-e-exemplos-de-uso-1h0j</guid>
      <description>&lt;h1&gt;
  
  
  JavaScript Map
&lt;/h1&gt;

&lt;h2&gt;
  
  
  O que é Map?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Map&lt;/strong&gt; é uma estrutura de dados &lt;strong&gt;key-value&lt;/strong&gt; (chave-valor) nativa do JavaScript que permite armazenar pares de dados de qualquer tipo como chave ou valor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nome&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;João&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;número um&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;booleano&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;objeto como chave&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Estrutura de Dados Interna
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Map é implementada como uma Hash Table (Tabela Hash)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────┐
│                    HASH TABLE                               │
├─────────────────────────────────────────────────────────────┤
│ Bucket 0: [key1, value1] -&amp;gt; [key4, value4]                 │
│ Bucket 1: [key2, value2]                                   │
│ Bucket 2: [key3, value3] -&amp;gt; [key5, value5]                 │
│ Bucket 3: empty                                            │
│ ...                                                        │
└─────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Como funciona internamente:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hash Function&lt;/strong&gt;: Converte a chave em um índice do array, ou seja, digamos que a chave e &lt;code&gt;banana&lt;/code&gt;, ele converte essa chave em um numero especifico, usando algorimitos de hasheamento avancados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collision Handling&lt;/strong&gt;: Usa chaining (encadeamento) para resolver colisões, isso significa que, as vezes quando uma chave e convertida em um indice, pode ser que esse indice conflite com um outro ja existente, oque o Map faz e em cada indice ao invez de ter apenas um valor, se tem um array, podendo armazenar mais de um valor por indice, a funcao &lt;code&gt;.get&lt;/code&gt; do Map lida em encontrar dentro desse array qual o item certo, mas colisoes sao raras pois o algoritimo de Hash e bem avancado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Resizing&lt;/strong&gt;: Redimensiona automaticamente quando necessário.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Big O
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operação&lt;/th&gt;
&lt;th&gt;Complexidade&lt;/th&gt;
&lt;th&gt;Explicação&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;set(key, value)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;O(1)&lt;/strong&gt; amortizado&lt;/td&gt;
&lt;td&gt;Hash direto para o bucket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;get(key)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;O(1)&lt;/strong&gt; amortizado&lt;/td&gt;
&lt;td&gt;Hash direto para busca&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;has(key)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;O(1)&lt;/strong&gt; amortizado&lt;/td&gt;
&lt;td&gt;Hash direto para verificação&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;delete(key)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;O(1)&lt;/strong&gt; amortizado&lt;/td&gt;
&lt;td&gt;Hash direto para remoção&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;O(1)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Propriedade mantida internamente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;clear()&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;O(n)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Precisa limpar todos os elementos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;forEach()&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;O(n)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Itera sobre todos os elementos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  O que significa "amortizado"?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Amortizado&lt;/strong&gt; é um termo técnico usado quando a complexidade de uma operação pode na verdade ter duas complexidades distintas, dependendo de dois cenários diferentes que podem ocorrer.&lt;/p&gt;

&lt;p&gt;O que acontece no &lt;code&gt;Map&lt;/code&gt; é que o tamanho &lt;code&gt;in-memory&lt;/code&gt; (na memória) de um &lt;code&gt;Map&lt;/code&gt; quando ele é iniciado é sempre 4, ou seja, 4 slots de memória são reservados para o Map. Nos 3 primeiros elementos que são adicionados ao Map, a operação tem complexidade &lt;strong&gt;O(1)&lt;/strong&gt;, mas no momento que o quarto elemento for adicionado, será necessário criar um novo espaço &lt;code&gt;in-memory&lt;/code&gt; de tamanho 8, e mover todos os elementos atuais para o novo espaço, em uma função que se assemelharia a essa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Processo interno do redimensionamento:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;oldTable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;           &lt;span class="c1"&gt;// O(1)&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oldTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// O(1)&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                         &lt;span class="c1"&gt;// O(1)&lt;/span&gt;

    &lt;span class="c1"&gt;// AQUI está o O(n)!&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;oldTable&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;       &lt;span class="c1"&gt;// O(n)&lt;/span&gt;
        &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;          &lt;span class="c1"&gt;// Rehash cada elemento&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apenas neste caso específico, a operação executada será &lt;strong&gt;O(n)&lt;/strong&gt;, mas como estes casos só vão acontecer cada vez que o &lt;code&gt;Map&lt;/code&gt; tiver que duplicar seu tamanho, é dito que a complexidade foi "amortizada" para um caso mais realista.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A sequência de redimensionamentos funciona assim:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inicialmente será a inserção do elemento número 4 que será &lt;strong&gt;O(n)&lt;/strong&gt; (com n=4)&lt;/li&gt;
&lt;li&gt;Depois esse número vai aumentar exponencialmente: a segunda vez será a inserção do elemento número 8 que será &lt;strong&gt;O(n)&lt;/strong&gt; (com n=8)&lt;/li&gt;
&lt;li&gt;Depois a inserção do elemento 16, depois a 32, depois a 64, depois a 128, e assim por diante&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chegando em um ponto que a operação &lt;strong&gt;O(n)&lt;/strong&gt; ficará tão distante uma da outra que pode ser desconsiderada em casos reais de uso. Por exemplo, se você tem um Map com 1 milhão de elementos, o próximo redimensionamento só acontecerá quando chegar a 2 milhões de elementos - uma distância muito grande entre as operações custosas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por isso a complexidade é chamada de "amortizada":&lt;/strong&gt; na média, considerando uma sequência longa de operações, o custo das operações caras (redimensionamento) é distribuído entre as operações baratas (inserções normais), resultando em uma complexidade média de &lt;strong&gt;O(1)&lt;/strong&gt; por operação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Map vs Object vs Array
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspecto&lt;/th&gt;
&lt;th&gt;Map&lt;/th&gt;
&lt;th&gt;Object&lt;/th&gt;
&lt;th&gt;Array&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tipos de chave&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Qualquer tipo&lt;/td&gt;
&lt;td&gt;String/Symbol&lt;/td&gt;
&lt;td&gt;Números (índices)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tamanho&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;map.size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Object.keys(obj).length&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;arr.length&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Iteração&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Preserva ordem de inserção&lt;/td&gt;
&lt;td&gt;Não garantida (ES5)&lt;/td&gt;
&lt;td&gt;Preserva ordem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Acesso&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;map.get(key)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;obj.key&lt;/code&gt; ou &lt;code&gt;obj[key]&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;arr[index]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;O(1) para tudo&lt;/td&gt;
&lt;td&gt;O(1) para acesso&lt;/td&gt;
&lt;td&gt;O(1) para acesso&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Exemplos Práticos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Criação e Operações Básicas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Adicionar&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nome&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maria&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;primeiro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;verdadeiro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Buscar&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nome&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "Maria"&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;      &lt;span class="c1"&gt;// "primeiro"&lt;/span&gt;

&lt;span class="c1"&gt;// Verificar existência&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nome&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;  &lt;span class="c1"&gt;// false&lt;/span&gt;

&lt;span class="c1"&gt;// Tamanho&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 3&lt;/span&gt;

&lt;span class="c1"&gt;// Remover&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nome&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Chaves de Qualquer Tipo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Objetos como chaves&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;primeiro objeto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;segundo objeto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "primeiro objeto"&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}));&lt;/span&gt; &lt;span class="c1"&gt;// undefined (diferente objeto!)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Iteração
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// Iterar chaves&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 'a', 'b', 'c'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Iterar valores&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 1, 2, 3&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Iterar pares&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 'a' 1, 'b' 2, 'c' 3&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// forEach&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Inicialização com Array
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;key1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;value1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;key2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;value2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;key3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;value3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// Converter Map para Array&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [['key1', 'value1'], ['key2', 'value2'], ['key3', 'value3']]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quando Usar Map?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Use Map quando:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Precisa de chaves que não são strings&lt;/li&gt;
&lt;li&gt;Precisa saber o tamanho frequentemente&lt;/li&gt;
&lt;li&gt;Precisa iterar em ordem de inserção&lt;/li&gt;
&lt;li&gt;Precisa de performance O(1) garantida&lt;/li&gt;
&lt;li&gt;Chaves são dinâmicas/desconhecidas&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Use Object quando:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Chaves são sempre strings&lt;/li&gt;
&lt;li&gt;Precisa de sintaxe mais simples&lt;/li&gt;
&lt;li&gt;Precisa de serialização JSON&lt;/li&gt;
&lt;li&gt;Tem métodos/propriedades específicas&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Exemplo Prático: Contagem de Caracteres
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;countChars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;char&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;char&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;char&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;char&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;countChars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello world&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Map { 'h' =&amp;gt; 1, 'e' =&amp;gt; 1, 'l' =&amp;gt; 3, 'o' =&amp;gt; 2, ' ' =&amp;gt; 1, 'w' =&amp;gt; 1, 'r' =&amp;gt; 1, 'd' =&amp;gt; 1 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Métodos Úteis
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Operações básicas&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Adiciona/atualiza&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;         &lt;span class="c1"&gt;// Obtém valor&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;         &lt;span class="c1"&gt;// Verifica existência&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// Remove&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;          &lt;span class="c1"&gt;// Remove todos&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;             &lt;span class="c1"&gt;// Tamanho&lt;/span&gt;

&lt;span class="c1"&gt;// Iteração&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;           &lt;span class="c1"&gt;// Iterator das chaves&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;         &lt;span class="c1"&gt;// Iterator dos valores&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;        &lt;span class="c1"&gt;// Iterator dos pares [key, value]&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Itera com callback&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Map é a estrutura perfeita para casos que precisam de mapeamento chave-valor com performance O(1) e flexibilidade de tipos!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>datastructures</category>
      <category>map</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Entendendo GAS e Transaction Fees na Ethereum: Do Legacy ao EIP-1559</title>
      <dc:creator>JOÃO PSTER</dc:creator>
      <pubDate>Mon, 12 Aug 2024 12:19:47 +0000</pubDate>
      <link>https://forem.com/web3-brasil/diario-web3-dia-2-aprendendo-gas-transaction-fee-gwei-wei-e-a-relacao-disso-com-a-eth-e-sua-network-2o7p</link>
      <guid>https://forem.com/web3-brasil/diario-web3-dia-2-aprendendo-gas-transaction-fee-gwei-wei-e-a-relacao-disso-com-a-eth-e-sua-network-2o7p</guid>
      <description>&lt;p&gt;&lt;strong&gt;AVISO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agora aqui eu vou postar conteúdo meu, mas reescrito por IA, e auditado por mim, para melhorar a qualidade, enquanto no meu perfil &lt;a class="mentioned-user" href="https://dev.to/jpster"&gt;@jpster&lt;/a&gt; vou postar o original escrito por mim.&lt;/p&gt;

&lt;h1&gt;
  
  
  Entendendo GAS e Transaction Fees na Ethereum: Do Legacy ao EIP-1559
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Bem-vindos, futuros desenvolvedores e entusiastas da Web3! Hoje, vamos mergulhar no fascinante mundo do GAS e das Transaction Fees na rede Ethereum. Vamos explorar como esse sistema evoluiu, passando do modelo legacy para o revolucionário EIP-1559.&lt;/p&gt;

&lt;h2&gt;
  
  
  O Conceito de GAS
&lt;/h2&gt;

&lt;p&gt;Imagine que a blockchain Ethereum é uma grande cidade, e as transações são pacotes que precisam ser entregues. O GAS é como o combustível necessário para que os "entregadores" (mineradores ou validadores) levem seus pacotes (transações) ao destino.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analogia do Mundo Real
&lt;/h3&gt;

&lt;p&gt;Pense no GAS como a gasolina que você coloca no carro para transportar algo valioso. Na Ethereum, o GAS é medido em unidades chamadas Gwei, que são frações minúsculas de ETH.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 ETH = 1,000,000,000 Gwei
1 Gwei = 0.000000001 ETH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  O Sistema Legacy de GAS
&lt;/h2&gt;

&lt;p&gt;No sistema antigo da Ethereum, as coisas funcionavam assim:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Você define um limite máximo de GAS que está disposto a pagar.&lt;/li&gt;
&lt;li&gt;Sua transação é enviada para a rede.&lt;/li&gt;
&lt;li&gt;Os mineradores escolhem as transações com maior oferta de GAS.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Prós e Contras do Sistema Legacy
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Prós:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Mineradores ganhavam bem com as taxas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Contras:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Usuários frequentemente pagavam taxas exorbitantes.&lt;/li&gt;
&lt;li&gt;Difícil prever o preço do GAS.&lt;/li&gt;
&lt;li&gt;Transações com baixo GAS podiam ficar presas por dias.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cenário Exemplo do Sistema Legacy
&lt;/h3&gt;

&lt;p&gt;Imagine uma loja popular lançando uma coleção limitada de NFTs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inicialmente, as taxas estão em 50 Gwei.&lt;/li&gt;
&lt;li&gt;A demanda explode, e alguns usuários oferecem 100 Gwei.&lt;/li&gt;
&lt;li&gt;Inicia-se uma "guerra de lances", com ofertas chegando a 500 Gwei.&lt;/li&gt;
&lt;li&gt;Usuários que mantêm 50 Gwei ficam para trás, possivelmente por dias.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A Revolução do EIP-1559
&lt;/h2&gt;

&lt;p&gt;O EIP-1559 (Ethereum Improvement Proposal 1559) veio para resolver esses problemas. Vamos entender as principais mudanças:&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais Alterações
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Introdução da "base fee" (taxa base).&lt;/li&gt;
&lt;li&gt;Aumento do limite de GAS por bloco.&lt;/li&gt;
&lt;li&gt;Nova estrutura de taxa: base fee + tip (gorjeta para mineradores).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Como Funciona a Base Fee?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A base fee é ajustada automaticamente baseada no uso da rede.&lt;/li&gt;
&lt;li&gt;Se o uso &amp;gt; 50%, a base fee aumenta.&lt;/li&gt;
&lt;li&gt;Se o uso &amp;lt; 50%, a base fee diminui.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limite de GAS por Bloco
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uso ≤ 50%: 12.5M GAS&lt;/li&gt;
&lt;li&gt;Uso &amp;gt; 50%: até 25M GAS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Composição da Nova Taxa
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Taxa Total = Base Fee + Tip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A base fee é queimada (destruída), reduzindo a oferta total de ETH.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cenário Exemplo com EIP-1559
&lt;/h3&gt;

&lt;p&gt;Voltando ao exemplo da loja de NFTs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rede a 50% de uso, taxa total em 50 Gwei.&lt;/li&gt;
&lt;li&gt;Demanda explode, uso sobe para 100%.&lt;/li&gt;
&lt;li&gt;Base fee aumenta 12.5% automaticamente no próximo bloco.&lt;/li&gt;
&lt;li&gt;Aumento continua enquanto o uso estiver acima de 50%.&lt;/li&gt;
&lt;li&gt;Altas taxas naturalmente reduzem o uso da rede.&lt;/li&gt;
&lt;li&gt;Quando o uso cai abaixo de 50%, a base fee começa a diminuir.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;O EIP-1559 trouxe um sistema mais equilibrado e previsível para as taxas na Ethereum. Ele ajuda a evitar picos extremos de preços e torna a rede mais eficiente a longo prazo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exercício para Fixação
&lt;/h2&gt;

&lt;p&gt;Imagine que você está desenvolvendo um dApp (aplicativo descentralizado) na Ethereum. Como você explicaria para seus usuários a importância de entender o sistema de GAS e como isso afeta o uso do seu dApp?&lt;/p&gt;

&lt;h2&gt;
  
  
  Recursos Adicionais
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=MGemhK9t44Q" rel="noopener noreferrer"&gt;Vídeo explicativo sobre EIP-1559&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://updraft.cyfrin.io/courses/" rel="noopener noreferrer"&gt;Curso Updraft para aprofundamento&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lembre-se: A compreensão desses conceitos é fundamental para qualquer desenvolvedor Web3. Continue estudando e praticando!&lt;/p&gt;

&lt;h1&gt;
  
  
  A Fundo: GAS na Ethereum
&lt;/h1&gt;

&lt;p&gt;Para entender completamente o funcionamento do GAS na Ethereum, vamos mergulhar nos detalhes técnicos tanto do sistema Legacy quanto do EIP-1559.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sistema Legacy: Detalhamento Técnico
&lt;/h2&gt;

&lt;p&gt;No sistema Legacy, o GAS funcionava da seguinte forma:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Gas Limit&lt;/strong&gt;: Usuários definiam um limite máximo de GAS que estavam dispostos a gastar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gas Price&lt;/strong&gt;: Usuários também definiam um preço por unidade de GAS em Gwei.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total Fee&lt;/strong&gt;: Era calculada multiplicando o Gas Limit pelo Gas Price.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Fee = Gas Limit * Gas Price
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Execução da Transação&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se a transação usasse menos GAS que o limite, o excesso era reembolsado.&lt;/li&gt;
&lt;li&gt;Se usasse mais, a transação falhava e o GAS era consumido.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Priorização&lt;/strong&gt;: Mineradores priorizavam transações com maior Gas Price.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Volatilidade&lt;/strong&gt;: Os preços flutuavam drasticamente baseados na demanda da rede.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  EIP-1559: Detalhamento Técnico
&lt;/h2&gt;

&lt;p&gt;O EIP-1559 introduziu um sistema mais complexo e eficiente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Base Fee&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calculada algoritmicamente para cada bloco.&lt;/li&gt;
&lt;li&gt;Ajusta-se baseada no uso do bloco anterior:

&lt;ul&gt;
&lt;li&gt;Se o bloco anterior estava cheio &amp;gt; 50%, a base fee aumenta até 12.5%.&lt;/li&gt;
&lt;li&gt;Se estava &amp;lt; 50% cheio, diminui até 12.5%.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;É queimada (removida permanentemente da circulação).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Max Priority Fee (Tip)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Definida pelo usuário.&lt;/li&gt;
&lt;li&gt;Vai diretamente para o minerador/validador.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Max Fee&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O máximo que o usuário está disposto a pagar.&lt;/li&gt;
&lt;li&gt;Inclui a base fee e a max priority fee.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Max Fee = Base Fee + Max Priority Fee
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cálculo da Taxa Efetiva&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se Max Fee &amp;gt; (Base Fee + Max Priority Fee):

&lt;ul&gt;
&lt;li&gt;Usuário paga: Base Fee + Max Priority Fee&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Se Max Fee &amp;lt; (Base Fee + Max Priority Fee):

&lt;ul&gt;
&lt;li&gt;Transação não é incluída no bloco&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tamanho do Bloco&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tamanho alvo: 15M unidades de GAS&lt;/li&gt;
&lt;li&gt;Tamanho máximo: 30M unidades de GAS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ajuste Dinâmico&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se o bloco &amp;gt; 15M GAS, a base fee aumenta.&lt;/li&gt;
&lt;li&gt;Se o bloco &amp;lt; 15M GAS, a base fee diminui.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mecanismo de Estabilização&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A base fee não pode mudar mais que 12.5% por bloco.&lt;/li&gt;
&lt;li&gt;Isso previne mudanças drásticas nos preços.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Previsibilidade&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usuários podem estimar melhor as taxas futuras.&lt;/li&gt;
&lt;li&gt;A base fee do próximo bloco é sempre conhecida.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Efeito Deflacionário&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Como a base fee é queimada, pode levar à deflação do ETH se o uso da rede for alto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inclusão de Transações&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transações são incluídas se: Max Fee ≥ Base Fee + Mínima Priority Fee aceitável pelo minerador.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Comparação Técnica
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspecto&lt;/th&gt;
&lt;th&gt;Legacy&lt;/th&gt;
&lt;th&gt;EIP-1559&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Estrutura da Taxa&lt;/td&gt;
&lt;td&gt;Gas Price * Gas Used&lt;/td&gt;
&lt;td&gt;Base Fee + Priority Fee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Previsibilidade&lt;/td&gt;
&lt;td&gt;Baixa&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volatilidade&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;td&gt;Reduzida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mecanismo de Ajuste&lt;/td&gt;
&lt;td&gt;Manual (pelos usuários)&lt;/td&gt;
&lt;td&gt;Algorítmico&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Destino das Taxas&lt;/td&gt;
&lt;td&gt;100% para mineradores&lt;/td&gt;
&lt;td&gt;Base Fee queimada, Priority Fee para mineradores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Impacto na Oferta de ETH&lt;/td&gt;
&lt;td&gt;Nenhum&lt;/td&gt;
&lt;td&gt;Potencialmente deflacionário&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Implicações para Desenvolvedores e Usuários
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estimativa de Taxas&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy: Necessário consultar oráculos de GAS ou fazer estimativas complexas.&lt;/li&gt;
&lt;li&gt;EIP-1559: Pode-se prever a base fee do próximo bloco com precisão.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Implementação em Carteiras&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy: Foco em ajustar o Gas Price.&lt;/li&gt;
&lt;li&gt;EIP-1559: Necessário implementar lógica para Max Fee e Priority Fee.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Estratégias de Transação&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy: "Substituição de transação" comum para aumentar o Gas Price.&lt;/li&gt;
&lt;li&gt;EIP-1559: Pode-se aumentar a Priority Fee para acelerar transações pendentes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Economia de Tokens&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy: Taxas não afetavam diretamente a oferta de ETH.&lt;/li&gt;
&lt;li&gt;EIP-1559: Queima de base fee pode impactar tokenomics de projetos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;UX em dApps&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy: Usuários frequentemente confusos com flutuações de preço.&lt;/li&gt;
&lt;li&gt;EIP-1559: Possibilidade de UX mais suave com taxas mais previsíveis.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esta análise detalhada mostra como o EIP-1559 não apenas mudou o mecanismo de taxas, mas também introduziu um sistema econômico mais sofisticado na Ethereum, afetando desenvolvedores, usuários e a própria economia da rede.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DIARIO WEB3 - Dia 2 - Aprendendo GAS (Transaction FEE), Gwei, Wei e a relação disso com a ETH e sua Network</title>
      <dc:creator>JOÃO PSTER</dc:creator>
      <pubDate>Mon, 12 Aug 2024 12:10:40 +0000</pubDate>
      <link>https://forem.com/jpster/diario-web3-dia-2-aprendendo-gas-transaction-fee-gwei-wei-e-a-relacao-disso-com-a-eth-e-sua-network-46h6</link>
      <guid>https://forem.com/jpster/diario-web3-dia-2-aprendendo-gas-transaction-fee-gwei-wei-e-a-relacao-disso-com-a-eth-e-sua-network-46h6</guid>
      <description>&lt;p&gt;Depois de fazer algumas transações fui introduzido ao GAS e a Transaction FEE (especificamente na rede etherium) depois fui apresentado a EIP 1559 que mudou a forma com que Transaction Fees são calculadas e executadas.&lt;/p&gt;

&lt;h1&gt;
  
  
  Oque eu aprendi?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Conceito de GAS
&lt;/h2&gt;

&lt;p&gt;Bem, é simples.&lt;br&gt;
No mundo real, se você tem que levar ouro de um local para outro você vai precisar de um transporte, em palavras resumidas você vai gastar gasolina para transportar esse ouro (claro que não é só isso, mas vamos pensar só nisso).&lt;/p&gt;

&lt;p&gt;Na rede Etherium (uma cripto) implementaram o sistema de GAS (GAS é gasolina em inglês), no ETH (Etherium) legacy se fazia da seguinte forma:&lt;/p&gt;

&lt;h3&gt;
  
  
  GAS na ETH Legacy
&lt;/h3&gt;

&lt;p&gt;Ao enviar sua transação para a rede, você definia um valor de GAS máximo que gostaria de pagar, então a transação era enviada para a Main network.&lt;/p&gt;

&lt;p&gt;Ao chegar lá, os mineradores (pessoas responsáveis por adicionar blocos novos a chain, vamos pensar assim), listavam os novos pedidos de acordo com o maior valor de GAS, e então executavam aquelas que tinham o maior valor.&lt;/p&gt;

&lt;h4&gt;
  
  
  Pontos Positivos
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Os mineradores ganhavam bastante, toda FEE era enviada diretamente para eles.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pontos Negativos
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Frequentemente os usuários da rede pagavam valores abusivos de GAS.&lt;/li&gt;
&lt;li&gt;Quando um evento gerava um pico de transações na Network o preço do GAS (e a quantidade dele) subia repentinamente.&lt;/li&gt;
&lt;li&gt;Era difícil prever a quantidade de GAS que os mineradores iriam aceitar no bloco seguinte.&lt;/li&gt;
&lt;li&gt;Quem colocasse um valor de GAS muito baixo (oque, se de repente tivesse um pico de uso na Network e as ofertas de GAS subissem muito, quem não estava sabendo e continuava a colocar pedidos com uma quantia de GAS normal acabava esperando muito para sua transação ser efetuada).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como podem ver, tem mais pontos negativos do que positivos, mas não é só isso, eu não sou o melhor para explicar isso, então no fim vou deixar alguns vídeos de referência.&lt;/p&gt;

&lt;h4&gt;
  
  
  Simulando um cenário real
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Ao colocar uma transação, estão pagando em média 50 Gwei de FEE, e tudo ocorre bem.&lt;/li&gt;
&lt;li&gt;Devido a um pico de uso da Rede começam a vir blocos desesperados pagando 100 de Gwei, e os mineradores priorizam eles.&lt;/li&gt;
&lt;li&gt;Devido ao movimento de manada, e agora a ter vários blocos a 100 Gwei, os mais apressados começam a pagar cada vez mais, 150, 200, 300, 500 Gwei.&lt;/li&gt;
&lt;li&gt;Aqueles que não tem pressa, vão acabar ficando nos 50 Gwei, e podem demorar dias para ter suas transações efetuadas.&lt;/li&gt;
&lt;li&gt;O sistema tenderá assim ao CAOS, com taxas cada vez maiores, até que acabe esse pico de uso.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Agora vamos ver na EIP 1559.&lt;/p&gt;

&lt;h3&gt;
  
  
  GAS pós EIP 1559
&lt;/h3&gt;

&lt;p&gt;Uma EIP significa Etherium Improvement Proposals (Propostas de melhoria da Etherium) e são geralmente discutidas apenas entre os membros do Core de desenvolvimento da ETH, mas a EIP 1559 é diferente, ela impacta todos, investidores, usuários e desenvolvedores.&lt;/p&gt;

&lt;p&gt;A EIP 1559 implementou um sistema de GAS price variável que se adapta de acordo com o uso atual da rede de forma autônoma, para vocês entenderem a fundo esse conceito convido a assistirem:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=MGemhK9t44Q" rel="noopener noreferrer"&gt;Can ETH Become DEFLATIONARY? EIP 1559 Explained&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Explicando a EIP 1559
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Mudanças na EIP 1559&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Uma basefee, é um valor base de FEE, nenhum pedido a Network pode ter menos do que esse basefee.&lt;/li&gt;
&lt;li&gt;Aumentou o limite de GAS de 12.5M para 25M, tecnicamente aumentando o tamanho do bloco.&lt;/li&gt;
&lt;li&gt;Agora, a FEE é composta de uma basefee e uma tip (a tip vai para os miners).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Como a Basefee é calculada?&lt;/strong&gt;&lt;br&gt;
A basefee é calculada de acordo com o uso da Network, caso a network esteja com mais de 50% &amp;lt; a basefee aumenta, caso a network esteja com menos de 50% &amp;gt; de carda a basefee abaixa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como o limite de GAS por bloco se comporta?&lt;/strong&gt;&lt;br&gt;
12.5M GAS &amp;gt; 50% &amp;gt; 25M GAS&lt;/p&gt;

&lt;p&gt;Ou seja, abaixo ou em 50% de uso, o limite de GAS por bloco é de 12.5M, acima de 50% é de 25M de Gás.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do que é composta a FEE?&lt;/strong&gt;&lt;br&gt;
A FEE agora é uma Basefee + uma TIP, a TIP é um valor também em Gwei que é enviado diretamente ao minerador daquela transação, é a recompensa dele.&lt;/p&gt;

&lt;p&gt;A basefee, como vou explicar mais para frente, vai ser queimada, isso mesmo, vai ser destruída, será ETH sendo destruido.&lt;/p&gt;

&lt;h4&gt;
  
  
  Simulando um cenário real
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Ao colocar uma transação, vamos dizer que os usuários estão pagando 50 Gwei de FEE (Somando Basefee + Tip), e tudo esta ocorrendo bem, pois a Network está em 50% de uso.&lt;/li&gt;
&lt;li&gt;De repente um pico sobe o uso da rede para 100%, no proximo bloco a Basefee vai ser automáticamente incrementada em 12.5% (A TIP pode variar, você quem define, quem tem uma TIP maior claramente vai ser priorizado).&lt;/li&gt;
&lt;li&gt;O pico continua, e então subsequentemente, bloco por bloco a Basefee será aumentada em 12.5% a cada bloco novo, enquanto a rede estiver acima de 50% de uso.&lt;/li&gt;
&lt;li&gt;Devido aos altos valores de FEE, a network é forçada devido ao seu alto valor por transação a ter menos transações, isso vai fazer com que o uso da Network abaixe, mas também devido a alta Basefee, muito ETH vai ser sendo perdido, fazendo com que tenha menos ETH na Rede, fazendo com que os ETH se tornem mais escassos, e assim, mais caros.&lt;/li&gt;
&lt;li&gt;Devido a pressão causada pelo alto valor de FEE, a Network começa a ser menos usada, fazendo com que o uso da Network caia para 40%, gradualmente, isso fará com que o tamanho do bloco máximo volte para 12.5M de GAS e reduzirá a basefee.&lt;/li&gt;
&lt;li&gt;Agora, devido ao baixo uso da rede e a FEE barata a rede começara a ser mais usada.&lt;/li&gt;
&lt;li&gt;O mesmo processo poderia acontecer novamente, mas as pessoas vão procurar o equilíbrio em 50% de uso, para manter justos os valores de FEE e a quantidade de uso da rede.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Resumo
&lt;/h3&gt;

&lt;p&gt;Bem, agora eu entendo melhor a questão de GAS, e a relação dele com a FEE, a FEE é taxa por transação, como a gasolina usada por um carro para transportar ouro, essa taxa é descrita em GAS, tipo 10 litros de gasolina é a taxa para levar ouro de um bairro para outro.&lt;/p&gt;

&lt;p&gt;O GAS é vendido por Gwei ou Wei, o Gwei e o Wei são basicamente Ether (Ether = Etherium), só que em escalas menores:&lt;br&gt;
Wei: 1,000,000,000 Wei = 1 Gwei (Gigawei)&lt;br&gt;
Gwei: 1000,000,000 Gwei = 1 Eth&lt;/p&gt;

&lt;p&gt;Em resumo, o GAS é a gasolina, que custa ETH, mas custa bem pouco, então para não ficar falando 0.00000000000000231 ETH, se fala 0.00000231 Gwei.&lt;/p&gt;

&lt;p&gt;Antigamente, quem pagava mais GAS era priorizado, e isso ia desenfreado tendendo ao CAOS, após a EIP 1559 existe um sistema mais complexo para regular o uso da Network e os preços de FEE, forçando o sistema ao equilíbrio, tipo um sistema de oferta e demanda, mas com uma intervenção autônoma descentralizada ajudando os seres humanos a evitar sua tendencia natural ao CAOS.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tentativa de Minerar
&lt;/h1&gt;

&lt;p&gt;Tentei começar a minerar, mas descobri que ETH não pode mais ser minerada, e sei que minerar Bitcoin vai ser uma loucura, vou deixar um link de um artigo que achei sobre criptos para minerar:&lt;/p&gt;

&lt;p&gt;Não estou recomendando, eu só achei, e lí.&lt;br&gt;
&lt;a href="https://coinledger.io/tools/best-crypto-to-mine" rel="noopener noreferrer"&gt;9 Best Cryptocurrencies for Mining (Easy to Hard)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Desisti de minerar por enquanto, só por enquanto.&lt;/p&gt;

&lt;h1&gt;
  
  
  Recomendações de conteúdo
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=MGemhK9t44Q" rel="noopener noreferrer"&gt;Can ETH Become DEFLATIONARY? EIP 1559 Explained&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://updraft.cyfrin.io/courses/" rel="noopener noreferrer"&gt;Updraft Course&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Meu sumiço
&lt;/h3&gt;

&lt;p&gt;Fiquei um tempo sem postar, devido a meu problema de procrastinação, pois acabei me envolvendo em alguns projetos secundários e não estava acordando tão cedo mais, desculpem-me, vou tentar enfrentar isso e acordar sempre cedo para estudar.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>web3</category>
      <category>web3brasil</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Conteúdo em Inglês</title>
      <dc:creator>JOÃO PSTER</dc:creator>
      <pubDate>Mon, 29 Jul 2024 12:56:31 +0000</pubDate>
      <link>https://forem.com/web3-brasil/conteudo-em-ingles-28gm</link>
      <guid>https://forem.com/web3-brasil/conteudo-em-ingles-28gm</guid>
      <description>&lt;p&gt;Gostaria de começar essa comunidade divulgando a minha primeira fonte de informações, o curso da &lt;a href="https://github.com/Cyfrin/foundry-full-course-cu" rel="noopener noreferrer"&gt;Cyfrin Updraft&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;No futuro publicarei conteúdos em português, explicando conceitos vindos de várias fontes, para ensinar brasileiros a Web3.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DIARIO WEB3 - Dia 1 Comecei a estudar Web 3, criei meu primeiro dMail e minha carteira na MetaMask.</title>
      <dc:creator>JOÃO PSTER</dc:creator>
      <pubDate>Mon, 29 Jul 2024 12:54:46 +0000</pubDate>
      <link>https://forem.com/jpster/diario-web3-dia-1-comecei-a-estudar-web-3-criei-meu-primeiro-dmail-e-minha-carteira-na-metamask-5ejj</link>
      <guid>https://forem.com/jpster/diario-web3-dia-1-comecei-a-estudar-web-3-criei-meu-primeiro-dmail-e-minha-carteira-na-metamask-5ejj</guid>
      <description>&lt;p&gt;DIARIO WEB3 - Dia 1 &lt;/p&gt;

&lt;p&gt;Comecei a estudar Web 3, criei meu primeiro dMail e minha carteira na MetaMask.&lt;/p&gt;

&lt;p&gt;Hoje comecei a estudar Web 3 com o Cyfrin Updraft, e estou ficando fascinado por essa nova geração, ainda não entendo bem todo o conceito, mas imaginar "Contratos Inquebráveis" que são os Smart Contracts e como isso pode impactar o mundo, ainda mais agora que o Banco Central do Brasil quer criar o DREX.&lt;/p&gt;

&lt;p&gt;Eu acredito que isto seja o futuro, então decidi começar a estudar, até agora entendi apenas conceitualmente os Smart Contracts, e o conceito de Oracle Problem, mas as networks ainda são um pouco obscuras para mim.&lt;/p&gt;

&lt;p&gt;Eu decidi entrar de cara nesse mundo, então comecei por uma coisa que acho que todo novato na internet faz, criar um email, só que na web3 não terá Google, e sim, dMail (Conceito de e-mail decentralizado) então criei meu primeiro dmail.ai, aliás, quem quiser: &lt;a href="mailto:joaopster@dmail.ai"&gt;joaopster@dmail.ai&lt;/a&gt; me manda uma mensagem lá! ;)&lt;/p&gt;

&lt;p&gt;Também comprei BSC e USDT na rede BNB Chain, para poder comprar o NFT &lt;a href="mailto:joaopster@dmail.ai"&gt;joaopster@dmail.ai&lt;/a&gt; (sim, o email é um NFT, também fiquei impressionado).&lt;/p&gt;

&lt;p&gt;Também fiz minha primeira transação na Sepolia Testnet, e claro, 2 transação na BNB Chain, como disse anteriormente, e estou ficando fascinado.&lt;/p&gt;

&lt;p&gt;Os próximos passos serão entender Gás na ETH, oque eu não entendo direito, e conforme avanço, vou começar a tentar ensinar oque aprendi em posts como esses, e na minha página no &lt;a href="https://dev.to/jpster"&gt;Dev.to&lt;/a&gt; :)&lt;/p&gt;

&lt;p&gt;Cyfrin Updraft: &lt;a href="https://github.com/Cyfrin/foundry-full-course-cu" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
