<?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: Victor Santos</title>
    <description>The latest articles on DEV Community by Victor Santos (@vitinhos67).</description>
    <link>https://dev.to/vitinhos67</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%2F780173%2Fa2cac482-8219-4d14-b7d7-8b5f447739f5.jpeg</url>
      <title>DEV Community: Victor Santos</title>
      <link>https://dev.to/vitinhos67</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vitinhos67"/>
    <language>en</language>
    <item>
      <title>Memorização em JavaScript</title>
      <dc:creator>Victor Santos</dc:creator>
      <pubDate>Tue, 05 Nov 2024 11:56:27 +0000</pubDate>
      <link>https://dev.to/vitinhos67/memorizacao-em-javascript-3dkk</link>
      <guid>https://dev.to/vitinhos67/memorizacao-em-javascript-3dkk</guid>
      <description>&lt;p&gt;A memorização (ou "memoization") é uma técnica de otimização que armazena os resultados de funções pesadas ou demoradas em cache, para que chamadas futuras com os mesmos argumentos sejam mais rápidas. A memorização é especialmente útil em funções puras, onde o mesmo conjunto de entradas sempre produz o mesmo resultado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como Funciona a Memorização?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando uma função memorizada é chamada pela primeira vez com determinados argumentos, ela executa o cálculo e armazena o resultado em um cache. Em chamadas subsequentes com os mesmos argumentos, a função retorna o resultado diretamente do cache, evitando o cálculo repetido.&lt;/p&gt;

&lt;p&gt;Implementação Básica de Memorização&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function memoize(fn) {
  const cache = {};

  return function(...args) {
    const key = JSON.stringify(args); // Cria uma chave única para os argumentos

    if (cache[key]) {
      console.log("Resultado em cache");
      return cache[key]; // Retorna o valor armazenado no cache
    }

    const result = fn(...args); // Calcula o valor
    cache[key] = result; // Armazena o resultado no cache

    return result;
  };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo de uso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function factorial(n) {
  if (n &amp;lt;= 1) return 1;
  return n * factorial(n - 1);
}

const memoizedFactorial = memoize(factorial);

console.log(memoizedFactorial(5)); // Calcula e armazena em cache
console.log(memoizedFactorial(5)); // Recupera do cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Benefícios da Memorização&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redução de Processamento: Evita cálculos repetidos, o que melhora o desempenho.&lt;/li&gt;
&lt;li&gt;Ideal para Funções Recursivas: Acelera o processamento de funções que precisam ser chamadas várias vezes com os mesmos valores.&lt;/li&gt;
&lt;li&gt;Eficiente em Funções Puras: A memorização funciona melhor quando a função retorna o mesmo valor para os mesmos argumentos.
Aplicações Comuns da Memorização&lt;/li&gt;
&lt;li&gt;Cálculos Matemáticos: Como fatorial, Fibonacci, etc.&lt;/li&gt;
&lt;li&gt;Chamadas de API: Evita chamadas de API duplicadas com os mesmos parâmetros.&lt;/li&gt;
&lt;li&gt;Operações de Custo Alto: Processamento de dados e manipulações complexas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resumo&lt;/strong&gt;&lt;br&gt;
A memorização em JavaScript é uma técnica poderosa para melhorar a eficiência do código e acelerar o desempenho em operações repetitivas e de alto custo computacional.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>memoization</category>
      <category>programming</category>
    </item>
    <item>
      <title>JavaScript: Fuja do escopo global.</title>
      <dc:creator>Victor Santos</dc:creator>
      <pubDate>Wed, 09 Feb 2022 15:28:13 +0000</pubDate>
      <link>https://dev.to/vitinhos67/fuja-do-escopo-global-em-javascript-2boa</link>
      <guid>https://dev.to/vitinhos67/fuja-do-escopo-global-em-javascript-2boa</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Para começarmos, o que e escopo?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bom, escopo designa um limite dentro quais recursos podem ser utilizados, está e a definição de escopo. Agora em JavaScript, quando falamos de escopo, temos dois tipos de escopo que trabalham de diferente formas, eles são os escopos globais (devemos evitá-lo) e escopo locais, se utilizarmos da forma certa, podemos criar um código muito mais eficiente. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Escopo Global&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O escopo global e quando declaramos uma variável no contexto global do código, sem estar no contexto de uma função, ex:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var nome = "Cleitinho Rasta"&lt;/code&gt;&lt;br&gt;
&lt;code&gt;console.log(nome) // Cleitinho Rasta&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A variável "nome" está sendo contextualizada globalmente, assim ela pode ser modificada/lida de qualquer lugar do código.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Escopo local&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quando declaramos uma variável dentro de um bloco de uma função, chamamos ela de variável local por que ela esta disponível apenas dentro da função, ex:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
function digaNome() {&lt;br&gt;
    var nome = 'Fabinho do Pneu'&lt;br&gt;
}&lt;br&gt;
console.log(nome) // Lançará um erro&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O código acima não será executado, pois a variável "nome" esta disponível apenas dentro da função "digaNome". Quando a função "digaNome" acabar de ser executada a variável diga nome não estará mais disponível.&lt;/p&gt;

&lt;p&gt;Exemplo de um codigo real:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9k8du44tibupj0u09590.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9k8du44tibupj0u09590.png" alt="Image description" width="800" height="222"&gt;&lt;/a&gt;&lt;br&gt;
Dito isso, sabemos o contexto na qual será executado as variáveis, deixando claro que devemos evitar a declaração de variáveis global, pois declarando desta forma a variável sempre esta disponível/alocada na memoria e então estaremos tendo uma perda de desempenho, isto em um sistema grande pode ser uma grande desvantagem. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Conheça o IIFE e veja o funcionado&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O IIFE(Self-Executing Anonymous Function) em português significa "Função anônima auto executante", como o próprio nome já diz, ela e uma função que assim que declarada ela auto executada sem precisar ser chamada como as funções normais.&lt;/p&gt;

&lt;p&gt;Para usarmos o IIFE devemos utilizar os parênteses "()", e dentro dela devemos colocar a sintaxe de uma função, &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk19of7pek9fn07jebzbi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk19of7pek9fn07jebzbi.png" alt="Image description" width="420" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E para ser executada devemos novamente utilizar os parênteses "()".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8apzcle0nnwg53e9tv1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8apzcle0nnwg53e9tv1t.png" alt="Image description" width="397" height="79"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tentando acessar a variável musica fora do escopo:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuz2pwfyrvkncnzfg7q7m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuz2pwfyrvkncnzfg7q7m.png" alt="Image description" width="422" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A variável "musica", não e acessada pois não esta no contexto global. Isto é ótimo para evitar que variáveis já declaradas globalmente se conflitam.&lt;/p&gt;

&lt;p&gt;Uma boa pratica ao utilizamos IIFE e colocarmos um ponto e virgula antes dos primeiros parênteses, assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl8ubfnuysavobtn33si.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl8ubfnuysavobtn33si.png" alt="Image description" width="408" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E uma boa pratica. Sem elas, Assim que o código for executado, poderá haver um conflito, exemplo:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fug5p6nryy5elmzjygacs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fug5p6nryy5elmzjygacs.png" alt="Image description" width="418" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O código lançara um erro.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Conclusão:&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vimos que evitar as variáveis globais e uma boa pratica para que nossa aplicação seja mais eficiente e também não haver conflitos em nosso código através dos escopos locais e também IIFE'S. &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
