<?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>DEV Community: Leomar Linhares</title>
    <description>The latest articles on DEV Community by Leomar Linhares (@leomarlinhares).</description>
    <link>https://dev.to/leomarlinhares</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%2F660177%2F51dbcd96-b1c3-4675-b7e1-a57097ab3842.jpg</url>
      <title>DEV Community: Leomar Linhares</title>
      <link>https://dev.to/leomarlinhares</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leomarlinhares"/>
    <language>en</language>
    <item>
      <title>Modularização e Microserviços: Quando Faz Sentido?</title>
      <dc:creator>Leomar Linhares</dc:creator>
      <pubDate>Thu, 27 Feb 2025 17:13:19 +0000</pubDate>
      <link>https://dev.to/leomarlinhares/modularizacao-e-microservicos-quando-faz-sentido-10ok</link>
      <guid>https://dev.to/leomarlinhares/modularizacao-e-microservicos-quando-faz-sentido-10ok</guid>
      <description>&lt;p&gt;Recentemente, esbarrei com um post no Reddit de uns dois anos atrás a partir do dia em que escrevo este artigo (27/02/2025).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/devops/comments/13cnspx/prime_video_reduces_costs_by_90_by_switching_from/" rel="noopener noreferrer"&gt;Prime Video reduces costs by 90% by switching from distributed microservices to a monolith application&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basicamente, ele cita um case de sucesso onde a Amazon Prime Video deixou de usar uma arquitetura de microserviços e voltou para um monólito, gerando uma economia significativa para a empresa.&lt;/p&gt;

&lt;p&gt;Acredito que qualquer desenvolvedor sabe que, nos últimos tempos, criou-se uma crença muito forte de que microserviços são uma bala de prata para garantir escalabilidade (eu incluso). Ou seja, iniciar um projeto já com microserviços seria o caminho certo para garantir seu sucesso a longo prazo.&lt;/p&gt;

&lt;p&gt;Entretanto, o que esse case da Amazon mostra é que nem sempre isso é verdade — nem mesmo para Big Techs, que geralmente têm muitos recursos, milhões de usuários e, em teoria, deveriam ter uma arquitetura altamente escalável.&lt;/p&gt;

&lt;p&gt;Só que microserviços não significam necessariamente escalabilidade. O que realmente dita a escalabilidade de um projeto &lt;strong&gt;é a capacidade de modularização dos componentes essenciais para seu funcionamento&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modularização como Premissa
&lt;/h2&gt;

&lt;p&gt;Independentemente de estar trabalhando com um monólito ou com microserviços, &lt;strong&gt;modularizar deve ser uma preocupação constante&lt;/strong&gt;. Estamos falando de isolamento de escopo e da responsabilidade única de cada peça dentro do sistema. Esse conceito se encaixa no que chamamos de &lt;strong&gt;Modular Monolithic Architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Essa abordagem segue um dos princípios mais importantes da engenharia de software: o &lt;strong&gt;KISS&lt;/strong&gt; (&lt;em&gt;Keep It Simple, Stupid&lt;/em&gt;). Manter a estrutura do código simples e bem organizada permite que o time compreenda melhor as partes fundamentais do projeto. E, com essa visão mais ampla, fica muito mais fácil tomar decisões informadas sobre quando (e se) um módulo deve ser transformado em um microserviço.&lt;/p&gt;

&lt;h2&gt;
  
  
  Microserviços Quando Necessário
&lt;/h2&gt;

&lt;p&gt;A chave aqui não é evitar microserviços, mas sim &lt;strong&gt;não começar um projeto já fragmentado em dezenas de pequenos serviços sem uma necessidade real&lt;/strong&gt;. Alguns fatores devem ser levados em conta antes de tomar essa decisão, sendo os principais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A importância do módulo&lt;/strong&gt;: É algo crítico para o sistema? Precisa de uma escalabilidade específica?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A frequência de uso&lt;/strong&gt;: O serviço será chamado o tempo todo ou é algo esporádico?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O tamanho do time&lt;/strong&gt;: Esse é um ponto crucial. De nada adianta ter uma arquitetura de microserviços se o time é pequeno e precisa conhecer e trabalhar em todos eles. Assim como não faz sentido ter um monólito enorme com um time gigante brigando por Pull Requests intermináveis e gerando gargalos na entrega.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Uber por exemplo teve que primeiro &lt;strong&gt;IDENTIFICAR&lt;/strong&gt; que a arquitetura de monolito não era mais suportável.&lt;br&gt;
É uma grande empresa que iniciou de um monolito, mas que teve que, a medida que eles &lt;strong&gt;cresciam&lt;/strong&gt; os microserviços foram se tornando necessários. Aí que o case de sucesso em escalabilidade se faz. Um dos grandes problemas principalmente de iniciantes é querer &lt;strong&gt;resolver problemas que não existem&lt;/strong&gt; (eu fui um iniciante enérgico querendo usar tudo que existe de "boas práticas" por aí 😅), mas que não está atacando nenhuma dor do projeto em si. A solução não se comunica com o que o projeto é.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.uber.com/en-BR/blog/service-oriented-architecture/" rel="noopener noreferrer"&gt;Service-Oriented Architecture: Scaling the Uber Engineering Codebase As We Grow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No fim das contas, modularização bem feita e uma visão prática da arquitetura são muito mais importantes do que seguir modas cegamente. Microserviços não são sinônimo de escalabilidade, assim como monólitos não são sinônimo de sistemas ruins e antiquados.&lt;/p&gt;

&lt;p&gt;Precisamos de um equilíbrio entre simplicidade e organização é o que realmente garante que um sistema seja sustentável no longo prazo. Nossa posição como desenvolvedores é compreender necessidades e atuar sobre elas. Entender as características do nosso produto ou do produto em que trabalhamos para nos perguntar de fato do que precisamos. Toda tendência é bacana para termos o conhecimento, mas não significa que nosso projeto pede por ela.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>architecture</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>4 Conceitos legais do JavaScript que você vai achar legal também</title>
      <dc:creator>Leomar Linhares</dc:creator>
      <pubDate>Sat, 05 Oct 2024 21:19:12 +0000</pubDate>
      <link>https://dev.to/leomarlinhares/4-conceitos-legais-do-javascript-que-voce-vai-achar-legal-tambem-40dp</link>
      <guid>https://dev.to/leomarlinhares/4-conceitos-legais-do-javascript-que-voce-vai-achar-legal-tambem-40dp</guid>
      <description>&lt;p&gt;Depois de alguns anos trabalhando com JavaScript, percebi que muitos dos problemas que enfrentei se tornaram desafiadores simplesmente por eu não conhecer alguns conceitos essenciais. Se eu tivesse dominado esses tópicos antes, certamente teria evitado alguns estresses.&lt;/p&gt;

&lt;p&gt;Então eu trouxe 4 conceitos que de alguma forma ficaram na minha cabeça e que eu fiquei simplesmente ANIMADÃO quando aprendi e recomendo dar uma visitada e entender para trabalhar com JavaScript, principalmente para pessoas que estão iniciando e já tem na memória pelo menos os conceitos básicos da linguagem.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Closures
&lt;/h2&gt;

&lt;p&gt;Closures são um dos conceitos mais poderosos e, por muitas vezes, confusos no JavaScript, relacionados ao escopo. Elas permitem que uma função "lembre" do ambiente em que foi criada, &lt;strong&gt;mesmo depois que esse ambiente não está mais em execução&lt;/strong&gt;. Isso é útil para criar variáveis "privadas" e gerenciar estados sem poluir o escopo global.&lt;/p&gt;

&lt;p&gt;Exemplo:&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;function&lt;/span&gt; &lt;span class="nf"&gt;criarContador&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;contador&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;incrementar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;contador&lt;/span&gt;&lt;span class="o"&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;contador&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;obterValor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&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;contador&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="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;meuContador&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;criarContador&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;meuContador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;obterValor&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// 0&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;meuContador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;incrementar&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// 1&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;meuContador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;incrementar&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// 2&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;meuContador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;obterValor&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;p&gt;No exemplo acima, a função interna acessa a variável contador, que pertence à função externa, mesmo depois de &lt;code&gt;meuContador&lt;/code&gt; já ter retornado valores usando ou &lt;code&gt;obterValor&lt;/code&gt; ou o &lt;code&gt;incrementar&lt;/code&gt;. Isso é possível graças ao closure.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Herança Prototípica
&lt;/h2&gt;

&lt;p&gt;Embora o JavaScript ofereça suporte a classes e herança de classes (um conceito bem consolidado em linguagens como Java ou C++), ele se diferencia ao adotar, de forma nativa, um modelo de herança baseado em protótipos. Em JavaScript, todo objeto tem um "protótipo", que serve como uma espécie de blueprint (molde), permitindo que propriedades e métodos sejam compartilhados entre objetos. Esse modelo de herança prototípica é uma das características mais fundamentais da linguagem, tornando-a mais flexível em comparação com a herança tradicional baseada em classes.&lt;/p&gt;

&lt;p&gt;Exemplo:&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;function&lt;/span&gt; &lt;span class="nf"&gt;Carro&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&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="nx"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;Carro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buzina&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&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="s2"&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="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; faz um som de buzina`&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;camaro&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;Carro&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Camaro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;camaro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;buzina&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Camaro faz um som de buzina&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui, &lt;code&gt;camaro&lt;/code&gt; herda o método &lt;code&gt;buzina&lt;/code&gt; do protótipo de &lt;code&gt;Carro&lt;/code&gt;, demonstrando a ideia de herança em JavaScript. Através da cadeia de protótipos, conseguimos compartilhar comportamentos entre diferentes objetos sem a necessidade de duplicar o código.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Currying
&lt;/h2&gt;

&lt;p&gt;Currying é uma técnica que transforma uma função que recebe vários argumentos em uma série de funções que recebem um único argumento de cada vez. Essa abordagem é útil para criar funções reutilizáveis e compor novas funções de maneira mais flexível.&lt;/p&gt;

&lt;p&gt;Exemplo:&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;function&lt;/span&gt; &lt;span class="nf"&gt;somar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&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="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&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;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;somarTres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;somar&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="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="nf"&gt;somarTres&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="c1"&gt;// 6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo, &lt;code&gt;somar(5)&lt;/code&gt; retorna uma nova função que recebe o segundo argumento, permitindo que se reutilize a lógica em diferentes partes do código.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Event Loop e Callbacks
&lt;/h2&gt;

&lt;p&gt;O Event Loop é um conceito fundamental para entender como o JavaScript lida com operações assíncronas — e rapaz, entender isso foi um divisor de águas no meu aprendizado de JavaScript. O que ele faz, basicamente, é monitorar a Call Stack (onde o código sincrônico é executado) e a Event Queue (onde ficam armazenadas as tarefas assíncronas, como callbacks, eventos e promessas). Quando a Call Stack está vazia, o Event Loop pega as tarefas da Event Queue e as coloca na pilha para serem executadas. Isso garante que o JavaScript consiga continuar rodando o código sem bloquear outras operações, algo essencial para manter a fluidez de aplicações que lidam com eventos de I/O, timers, e interações com o DOM.&lt;br&gt;
Exemplo:&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="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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Início&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;setTimeout&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Timer expirou&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="mi"&gt;0&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fim&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Saída:&lt;/span&gt;
&lt;span class="c1"&gt;// Início&lt;/span&gt;
&lt;span class="c1"&gt;// Fim&lt;/span&gt;
&lt;span class="c1"&gt;// Timer expirou&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mesmo que o setTimeout seja configurado para 0 milissegundos, ele é colocado no Event Queue e só será executado após o código sincrônico (como os console.log) ter sido processado.&lt;br&gt;
Pretendo detalhar isso melhor e com imagens em outro artigo focado nesse conceito, pois pra mim foi muito importante entender e tenho certeza que pra muitas pessoas vai ser também.&lt;/p&gt;

&lt;p&gt;Você gostaria de saber mais sobre algum desses conceitos ou tem dúvidas específicas? Deixe nos comentários que eu vou dar uma olhada!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
