<?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: ju</title>
    <description>The latest articles on DEV Community by ju (@julesnotes).</description>
    <link>https://dev.to/julesnotes</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%2F779201%2F48e9d9ac-d9b0-45f1-a46a-29cb105fd4cf.png</url>
      <title>DEV Community: ju</title>
      <link>https://dev.to/julesnotes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/julesnotes"/>
    <language>en</language>
    <item>
      <title>Datalking #1: So, the machine is learning... How?</title>
      <dc:creator>ju</dc:creator>
      <pubDate>Thu, 23 May 2024 01:56:45 +0000</pubDate>
      <link>https://dev.to/julesnotes/datalking-1-so-the-machine-is-learning-learning-what-3lpd</link>
      <guid>https://dev.to/julesnotes/datalking-1-so-the-machine-is-learning-learning-what-3lpd</guid>
      <description>&lt;p&gt;Depois de um longo período sem aparecer por aqui, resolvi voltar a publicar textos sobre os meus estudos. Há alguns meses fiz uma breve transição da área de Front-end para a área de Dados e Machine Learning, e uma boa parte da minha decisão se deve ao fato de que entrei, há algumas semanas, em um grupo de pesquisa da Universidade Federal do Paraná, o CiDAMO, que foca nos estudos das áreas de Aprendizado de Máquina, Otimização e Dados. Desde então, concentro os meus estudos em Machine Learning, e decidi trazê-los para cá, em alguns posts pequenos para me ajudar a fixar o conteúdo e, principalmente, ajudar outros iniciantes que possam aparecer por aqui por acaso. :)&lt;/p&gt;

&lt;h3&gt;
  
  
  O que pode ser entendido por "Machine Learning"?
&lt;/h3&gt;

&lt;p&gt;De acordo com a IBM, &lt;a href="https://www.ibm.com/br-pt/topics/machine-learning" rel="noopener noreferrer"&gt;Machine learning&lt;/a&gt; é uma área da inteligência artificial (IA) e da ciência da computação que se concentra no uso de dados e algoritmos para imitar a maneira como os humanos aprendem, melhorando gradualmente sua precisão.&lt;/p&gt;

&lt;p&gt;Pode parecer uma definição simples, mas não explica muita coisa. O que isso quer dizer?&lt;/p&gt;

&lt;p&gt;Imagine que você é um ilustrador digital e utiliza um software de edição de imagens para criar as suas ilustrações. Recentemente, você fez a compra de um pacote de novos pincéis para fazer desenhos em aquarela – algo que nunca tinha feito antes –, mas esqueceu de instalá-los. Logo, sem a instalação dos pincéis, não é possível que você aprenda a aumentar seu conhecimento sobre desenho digital e comece a desenhar no estilo aquarela, certo? Com o aprendizado de máquina é mais ou menos assim!&lt;/p&gt;

&lt;p&gt;Em um sistema que utiliza o aprendizado de máquina para reconhecer padrões, são aplicados os &lt;em&gt;training sets&lt;/em&gt; para a máquina poder, de fato, aprender. Além disso, esses conjuntos possuem uma instância de treinamento, que pode ser uma observação ou um registro no seu conjunto de dados sobre o qual você deseja fazer uma previsão (sabe quando criamos personagens no Sims e eles te oferecem a possibilidade de escolher a cor do cabelo, corte do cabelo, cor dos olhos, etc? Podemos relacionar essas características às instâncias de treinamento e os seus personagens aos dados de treino!). Independente do algoritmo utilizado, os dados instanciados são extremamente necessários para que o sistema de ML os utilize a partir de conjuntos de treinamento. Caso eles não sejam inseridos nestes conjuntos e, consequentemente, utilizados nos treinamentos do modelo, não é possível &lt;em&gt;aprimorar&lt;/em&gt; o seu sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  E como esses modelos aprendem?
&lt;/h3&gt;

&lt;p&gt;Há duas maneiras de ensinar o seu modelo de ML, dependendo da sua necessidade e dos seus recursos disponíveis. O aprendizado &lt;strong&gt;Batch&lt;/strong&gt;, mais convencional, nada mais é do que o aprendizado em lote — ou seja, o seu algoritmo é alimentado de uma só vez com um conjunto completo de dados (o lote propriamente dito), e é a partir desse conjunto que o seu algoritmo será treinado. Assim como ele é alimentado de uma só vez, o seu algoritmo também irá processar os conjuntos de treinamento da mesma forma. No que diz respeito às vantagens, isso vai depender dos seus recursos. Se você possui um conjunto de dados bastante estável e bons recursos computacionais, é interessante optar pelo aprendizado Batch. Alguns dos modelos que aprendem por Batch são os de regressão e classificação, por exemplo.&lt;/p&gt;

&lt;p&gt;Mas se essa não é a sua realidade, uma boa opção é ensinar o seu algoritmo através do aprendizado &lt;strong&gt;Online&lt;/strong&gt;, que treina o sistema por meio de amostras do conjunto de dados em tempo real, e não em um lote, de uma só vez, como o Batch. É um método interessante, porque permite que o seu sistema possa ser atualizado, de forma contínua, com novas amostras de dados de treinamento. Isso economiza recursos, tempo (pois os conjuntos de treino são processados um de cada vez) e permite que o seu modelo se adapte às mudanças dos dados de maneira contínua. Esse tipo de aprendizado é bastante aplicado em detecção de anomalias e recomendações, ou seja, problemas que requerem que o seu algoritmo se adapte a mudanças constantes nos padrões dos dados.&lt;/p&gt;

&lt;h3&gt;
  
  
  Concluindo!
&lt;/h3&gt;

&lt;p&gt;Como expliquei no primeiro parágrafo, estou documentando os meus aprendizados como iniciante na área, então essa série de artigos será composta de textos curtos sobre Machine Learning, como se fossem os componentes um roadmap em escrito com pequenas paradas durante a trilha. No próximo post, falarei sobre alguns exemplos de algoritmos de Aprendizagem Supervisionada, que o meu foco de estudo atual. Caso tenha gostado ou queira me enviar sugestões, dúvidas ou críticas, fique à vontade para comentar nesse post ;) Até breve!&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;p&gt;Geron, A. (2019). Hands-on machine learning with Scikit-Learn, Keras and TensorFlow: concepts, tools, and techniques to build intelligent systems (2nd ed.). O’Reilly.&lt;br&gt;
&lt;a href="https://guiadehospedagem.com.br/glossario/o-que-e-batch-learning-vs-online-learning/" rel="noopener noreferrer"&gt;https://guiadehospedagem.com.br/glossario/o-que-e-batch-learning-vs-online-learning/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.deeplearningbook.com.br/machine-learning-guia-definitivo-parte-3/" rel="noopener noreferrer"&gt;https://www.deeplearningbook.com.br/machine-learning-guia-definitivo-parte-3/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>beginners</category>
      <category>ai</category>
    </item>
    <item>
      <title>JavaScripting #1: como utilizar as declarações var, let e const?</title>
      <dc:creator>ju</dc:creator>
      <pubDate>Sun, 01 May 2022 21:11:40 +0000</pubDate>
      <link>https://dev.to/julesnotes/javascripting-1-como-utilizar-as-declaracoes-var-let-e-const-1paa</link>
      <guid>https://dev.to/julesnotes/javascripting-1-como-utilizar-as-declaracoes-var-let-e-const-1paa</guid>
      <description>&lt;p&gt;No início dos meus estudos &lt;em&gt;mais aprofundados&lt;/em&gt; em JavaScript, na disciplina de Desenvolvimento Web I, discernir entre os tipos de declarações de variáveis era, certamente, uma das minhas maiores dificuldades. Afinal de contas – e era assim mesmo que eu pensava –, &lt;em&gt;não é tudo a mesma coisa?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Adivinha só: não é! E muito disso se baseia nos conceitos de &lt;strong&gt;escopo&lt;/strong&gt;. Se em tempos remotos só tínhamos o &lt;code&gt;var&lt;/code&gt; como declaração de variáveis em &lt;strong&gt;escopos globais&lt;/strong&gt; e &lt;strong&gt;de função&lt;/strong&gt;, com a chegada do &lt;strong&gt;ECMAScript 6&lt;/strong&gt;, lá em 2015, tornou-se possível declarar variáveis com &lt;code&gt;let&lt;/code&gt; e &lt;code&gt;const&lt;/code&gt; e também surgiram os &lt;strong&gt;escopos de bloco&lt;/strong&gt;, funcionalidades que deixaram o JavaScript mais uniforme e (um pouco) menos sujeito a problemas de segurança.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚨 ...e acho que aqui vale um pequeno adendo sobre o que é um escopo e quais os tipos de escopos que existem:
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;escopo global&lt;/strong&gt; se refere a todo o código – ou seja, se você tiver 20 funções diferentes no seu documento de código e declarar uma variável global, é possível utilizar essa variável nessas 20 funções. Assim:&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;var&lt;/span&gt; &lt;span class="nx"&gt;hello&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bem-vindo!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;visitorOne&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;visitorTwo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;visitorThree&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já o &lt;strong&gt;escopo local&lt;/strong&gt; (ou &lt;strong&gt;de função&lt;/strong&gt;) é todo pedaço de código referente a uma função. Ou seja, uma variável de função é toda variável declarada dentro de uma função e que só pode ser acessada dentro dela. Um 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;showComments&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;comment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Muito legal!&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;comment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;//Ao acessar essa função, o valor da variável "comment" será mostrado em tela.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;showComments&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;//Muito legal!&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;showOtherComments&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;comment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;//Aqui o resultado retornado pela função hideComments será um erro dizendo que a variável não foi definida, pois é impossível acessar a variável "comment", já que é uma variável reservada APENAS ao escopo da função showComments(), logo, será interpretada como se fosse uma variável inexistente.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;showOtherComments&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;//ReferenceError: comment is not defined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por fim, o &lt;strong&gt;escopo de bloco&lt;/strong&gt; é qualquer região do código que utilize os famosos "bigodinhos" (ou melhor, chaves), assim como as funções, porém, a diferença esse tipo de escopo é criado por estruturas de controle, tais como as estruturas condicionais &lt;code&gt;if/else&lt;/code&gt; ou &lt;code&gt;switch&lt;/code&gt;, de repetição &lt;code&gt;for&lt;/code&gt; ou &lt;code&gt;do/while&lt;/code&gt;, entre outros. Por ter essa particularidade, as variáveis declaradas em &lt;strong&gt;escopo de bloco&lt;/strong&gt; podem ser acessadas &lt;em&gt;dentro de toda a função&lt;/em&gt;, e não apenas na estrutura de controle. Tipo isso aqui:&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;commentPost&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;//Escopo de função&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;blogPost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;finished&lt;/span&gt;&lt;span class="dl"&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;blogPost&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;finished&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;//Escopo de bloco&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;anewrites&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Comenta aí, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! :P`&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="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Continue lendo &amp;lt;3&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="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;blogPost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//finished&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;username&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//anewrites&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que já temos uma pequena noção de como cada tipo de escopo funciona, vamos dar uma olhada no que significa cada declaração de variável e como elas podem ser utilizadas dentro de cada tipo de escopo. 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  O velho conhecido "var"
&lt;/h2&gt;

&lt;p&gt;Como eu comentei ali no comecinho do post, o &lt;code&gt;var&lt;/code&gt; era a única declaração de variável global e de escopo de função disponível até a chegada do &lt;strong&gt;ES6&lt;/strong&gt; – ou seja, o &lt;code&gt;var&lt;/code&gt; pode ser declarado globalmente e ser acessado em qualquer região do código, ou ser declarado em escopos de função e acessado apenas nas funções as quais essas variáveis pertencem. Resumidamente, a vantagem de utilizar &lt;code&gt;var&lt;/code&gt;, pelo menos até a chegada do &lt;strong&gt;ES6&lt;/strong&gt;, é diferenciar variável local de variável global.&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;//Sintaxe:&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;varname1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;//Var declarada de forma global&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;posts&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;postCounter&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;posts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;postCounter2&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;posts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;postCounter3&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;posts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;postCounter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//2&lt;/span&gt;
&lt;span class="nf"&gt;postCounter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//2&lt;/span&gt;
&lt;span class="nf"&gt;postCounter&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;posts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//2&lt;/span&gt;

&lt;span class="c1"&gt;//Var declarada em escopo de função&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ane&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;postCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;numberOfPosts&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="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="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; fez &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;numberOfPosts&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; posts até agora!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;postCounter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//Ane fez 2 posts até agora!&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;numberOfPosts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//ReferenceError: numberOfPosts is not defined (ao tentar acessar essa variável fora da função, obtemos um erro, pois ela só "existe" dentro da função em que foi declarada)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Além dessas duas maneiras de &lt;em&gt;declarar&lt;/em&gt; uma &lt;code&gt;var&lt;/code&gt;, é possível atribuir outro valor à mesma variável. Desta forma:&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;var&lt;/span&gt; &lt;span class="nx"&gt;posts&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;posts&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="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;posts&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;
  
  
  E o hoisting, hein? 🏗️
&lt;/h3&gt;

&lt;p&gt;Eu até falei que é possível atribuir outro valor a uma variável &lt;code&gt;var&lt;/code&gt;, mas tem algo um tanto &lt;em&gt;complicado&lt;/em&gt; sobre fazer isso: o &lt;strong&gt;hoisting&lt;/strong&gt;. Derivado do termo &lt;em&gt;hoist&lt;/em&gt; em inglês, que significa "levantar" ou "içar" algo, o hoisting faz com que uma &lt;code&gt;var&lt;/code&gt; seja posicionada no início do contexto de execução no qual ela foi declarada – ou seja, esse mecanismo faz com que as variáveis &lt;code&gt;var&lt;/code&gt; que você declarou "subam" para o início do seu trecho de código antes mesmo que ele seja executado, algo que faz com que a sua variável, que antes tinha um valor, seja interpretada como &lt;code&gt;undefined&lt;/code&gt;, mais ou menos assim:&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;var&lt;/span&gt; &lt;span class="nx"&gt;texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dá pra evitar hoisting? D:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;//Variável var global&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;writeOnScreen&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;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;às vezes é inevitável...&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;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;writeOnScreen&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;//undefined&lt;/span&gt;
&lt;span class="c1"&gt;//às vezes é inevitável...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Mas ué, cadé o primeiro console.log?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Então, esse é o conceito do &lt;strong&gt;hoisting&lt;/strong&gt;. Ao invés de interpretar a variável global e exibi-la em tela, esse mecanismo irá inicializar a variável global lá no início do bloco de função, e só depois é que ela será executada. Pra entender de vez como isso funciona, vamos pensar de acordo com o próprio JavaScript, passo a passo. É assim que esse bloco de função foi executado:&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;var&lt;/span&gt; &lt;span class="nx"&gt;texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dá pra evitar hoisting? D:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;//Variável var global&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;writeOnScreen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//A variável global foi "levantada" durante a execução até o início deste bloco de função&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;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//undefined (pois ela só foi declarada aqui dentro, mas não foi definida)&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;às vezes é inevitável...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Valor atribuído pela primeira vez (de acordo com o hoisting) dentro deste bloco de função&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;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;writeOnScreen&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;//undefined&lt;/span&gt;
&lt;span class="c1"&gt;//às vezes é inevitável...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui notamos uma das desvantagens de utilizar declarações &lt;code&gt;var&lt;/code&gt;. Caso ela sofra &lt;em&gt;hoisting&lt;/em&gt;, será inicializada sempre com um valor &lt;code&gt;undefined&lt;/code&gt;. E claro, talvez a maior brecha de segurança da utilização do &lt;code&gt;var&lt;/code&gt; seja a facilidade em redefinir valores para uma declaração &lt;code&gt;var&lt;/code&gt;, independente do seu escopo de origem, prática que pode vir a causar inúmeros bugs na sua aplicação. Portanto – e essa é uma opinião minha, baseada no que estudei até aqui e ouvi de pessoas desenvolvedoras mais experientes -, com a chegada do &lt;strong&gt;ECMAScript 6&lt;/strong&gt;, é possível evitar a utilização do &lt;code&gt;var&lt;/code&gt;, a não ser que a aplicação em questão seja utilizada em navegadores mais antigos, que não possuam suporte a &lt;code&gt;let&lt;/code&gt; e &lt;code&gt;const&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A chegada do let
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;ECMAScript 6&lt;/strong&gt; trouxe diversas novidades, e uma delas foi a chegada da declaração &lt;code&gt;let&lt;/code&gt;, uma versão mais consistente de declaração de variáveis e que evita problemas de declaração repetida no mesmo escopo, por exemplo. A seguir, vamos ver algumas das funcionalidades do &lt;code&gt;let&lt;/code&gt; e como elas podem ser vantajosas para o nosso código:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;let&lt;/code&gt; é declarado &lt;strong&gt;apenas em escopos de bloco&lt;/strong&gt;, ou seja, qualquer pedaço do código delimitado por chaves (&lt;code&gt;{}&lt;/code&gt;) e a variável em questão estará disponível &lt;em&gt;apenas&lt;/em&gt; neste escopo, dessa forma:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;25&lt;/span&gt;&lt;span class="dl"&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;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;20&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fulano&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;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//fulano&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;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//name is not defined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;let&lt;/code&gt; também não permite uma declaração repetida de uma variável como é visto no &lt;code&gt;var&lt;/code&gt;. É possível atribuir outro valor a uma variável &lt;code&gt;let&lt;/code&gt;, mas não é permitido declará-la novamente. Por exemplo:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Atribuição de um novo valor&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;bolo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;morango&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;bolo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;abacaxi&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;bolo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//abacaxi&lt;/span&gt;

&lt;span class="c1"&gt;//Declaração repetida da variável&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;bolo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;morango&lt;/span&gt;&lt;span class="dl"&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;bolo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;abacaxi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Identificador 'bolo' já foi declarado&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Porém&lt;/em&gt;, isso é uma regra apenas para declarações de variáveis &lt;strong&gt;no mesmo escopo&lt;/strong&gt;. Em escopos diferentes, essa declaração repetida funcionará normalmente, já que o JavaScript interpreta variáveis de escopos diferentes como declarações diferentes.&lt;/p&gt;

&lt;p&gt;Acredito que o &lt;code&gt;let&lt;/code&gt; seja um tanto mais seguro que o &lt;code&gt;var&lt;/code&gt; nesse sentido. Ao declarar duas variáveis com o mesmo nome, mas em escopos diferentes, por exemplo, não temos o risco de estarmos mexendo na mesma variável, como ocorre em variáveis do tipo &lt;code&gt;var&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por fim, a variável constante!
&lt;/h2&gt;

&lt;p&gt;É assim que eu gosto de chamar a declaração &lt;code&gt;const&lt;/code&gt;, pra ser sincera. E, de fato, é mais ou menos isso. O &lt;code&gt;const&lt;/code&gt; armazena valores &lt;em&gt;read-only&lt;/em&gt; que não podem ser alterados, ou seja, que se mantêm constantes. Algumas características do &lt;code&gt;const&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Variáveis declaradas como &lt;code&gt;const&lt;/code&gt;, assim como &lt;code&gt;let&lt;/code&gt;, só podem ser acessadas em &lt;strong&gt;escopo de bloco&lt;/strong&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Meio óbvio, mas é bom reforçar: variáveis &lt;code&gt;const&lt;/code&gt; não podem ser redefinidas. Ou seja, você não poderá fazer isso:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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;suco&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;laranja&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;suco&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;limão&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//TypeError: Atribuição à variável constante.&lt;/span&gt;

&lt;span class="c1"&gt;//E nem isso:&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;torta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;limão&lt;/span&gt;&lt;span class="dl"&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;torta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;banofee&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Identificador 'torta' já foi declarado&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Justamente por ser uma variável constante ( 🤪 ), o &lt;code&gt;const&lt;/code&gt; precisa ser inicializado com um valor atribuído. Caso contrário, o seguinte erro será mostrado:
&lt;/li&gt;
&lt;/ul&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;fruta&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="c1"&gt;//Missing initializer in const declaration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Certo, mas então qual delas eu devo usar?
&lt;/h2&gt;

&lt;p&gt;Isso vai depender muito de qual aplicação você está desenvolvendo, e para qual browser. Se o seu projeto for direcionado a browsers mais antigos, continue utilizando &lt;code&gt;var&lt;/code&gt; sem problemas, pois não é garantido que browsers mais antigos forneçam suporte ao &lt;strong&gt;ECMAScript 6&lt;/strong&gt;. Do contrário, se estamos falando de variáveis que vão ser alteradas, acredito no &lt;code&gt;let&lt;/code&gt; como a melhor forma de declarar variáveis mutáveis, ou pelo menos a mais segura e descomplicada. Já para variáveis &lt;em&gt;read-only&lt;/em&gt;, o &lt;code&gt;const&lt;/code&gt; é a declaração que fornece maior segurança. :)&lt;/p&gt;

&lt;p&gt;Isso é um pouquinho do que sei sobre declaração de variáveis no JavaScript como iniciante no assunto 😉 Caso tenham gostado ou queiram me enviar sugestões, dúvidas ou críticas, fiquem à vontade para comentar esse post ou me chamar lá no twitter &lt;a href="https://twitter.com/anestudies" rel="noopener noreferrer"&gt;@anestudies&lt;/a&gt; ;) Até breve!&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Grammar_and_types" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Grammar_and_types&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/pt-BR/docs/Glossary/Scope" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Glossary/Scope&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.alura.com.br/artigos/entenda-diferenca-entre-var-let-e-const-no-javascript" rel="noopener noreferrer"&gt;https://www.alura.com.br/artigos/entenda-diferenca-entre-var-let-e-const-no-javascript&lt;/a&gt;&lt;br&gt;
&lt;a href="https://walde.co/2016/02/15/javascript-hoisting-o-que-e/" rel="noopener noreferrer"&gt;https://walde.co/2016/02/15/javascript-hoisting-o-que-e/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Diferença e organização de Class e ID no CSS: quando e como utilizá-los?</title>
      <dc:creator>ju</dc:creator>
      <pubDate>Sat, 23 Apr 2022 20:24:08 +0000</pubDate>
      <link>https://dev.to/julesnotes/diferenca-e-organizacao-de-class-e-id-no-css-quando-utiliza-las-69g</link>
      <guid>https://dev.to/julesnotes/diferenca-e-organizacao-de-class-e-id-no-css-quando-utiliza-las-69g</guid>
      <description>&lt;p&gt;Essa é uma sugestão que recebi no &lt;em&gt;#studytwt&lt;/em&gt;, e também era uma dúvida que me incomodava bastante quando iniciei meus estudos em CSS: quando devo utilizar &lt;em&gt;ids&lt;/em&gt; de forma semântica? E &lt;em&gt;classes&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Antes de solucionar essa dúvida, é importante entender &lt;strong&gt;quais são&lt;/strong&gt;, de fato, as maneiras de definir estilos em elementos HTML.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aplicando estilo em HTML: como eu faço isso?
&lt;/h2&gt;

&lt;p&gt;Basicamente, há três maneiras de deixar seus elementos HTML estilizados, e eles são aplicados dessa forma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A partir do próprio elemento html:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1100px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e8c547&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;ul&gt;
&lt;li&gt;Utilizando &lt;strong&gt;ids&lt;/strong&gt;, identificado pelo "#" no início do seletor:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nf"&gt;#content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;720px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e8c547&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;ul&gt;
&lt;li&gt;Utilizando &lt;strong&gt;classes&lt;/strong&gt;, identificado pelo "." no início do seletor:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;380px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e8c547&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;h2&gt;
  
  
  Tá, mas o que significa cada um desses seletores?
&lt;/h2&gt;

&lt;p&gt;Começando do começo: os &lt;strong&gt;elementos&lt;/strong&gt; são declarados a partir de &lt;em&gt;tags&lt;/em&gt; em uma página HTML. Entre as &lt;em&gt;tags&lt;/em&gt;, é possível inserir o &lt;em&gt;elemento&lt;/em&gt; que você gostaria de declarar em determinado trecho do HTML. Visualmente (ou codificadamente) falando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--Aqui, o elemento inserido é um article, utilizado para inserir um artigo de jornal, widgets, comentários de usuários ou qualquer outra coisa do tipo. Para inserir o elemento article, utilizamos a tag &amp;lt;article&amp;gt;--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;article&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;anestudies&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; disse às 14:45:&lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  "você vai aprender webdev sim, fique tranquile :)"
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já as &lt;strong&gt;classes&lt;/strong&gt; identificam um grupo de elementos HTML. Como a própria definição já diz, é possível reutilizar uma única classe diversas vezes em um documento HTML. É mais ou menos assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Uma única classe... */&lt;/span&gt;
&lt;span class="nc"&gt;.font&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Helvetica&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--...utilizada para identificar diversos elementos--&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"font"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bem-vindo!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"font"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Primeiro post do blog :P&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"font"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Esses posts estarão disponíveis semanalmente, todo fim de semana (sábado?
  Domingo? Sexta-feira? Sim, sexta-feira é um 'pré-fim de semana')
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por fim, os &lt;strong&gt;ids&lt;/strong&gt;, ao contrário das classes, são utilizados para identificar um elemento que não será repetido na sua página HTML. Se formos comparar o id a algo relacionado ao nosso dia a dia, ele seria o nosso RG – ou seja, ele é único. O id é aplicado dessa forma no HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--Suponha que, nesta página, teremos apenas UM container.--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/*Logo, o mais correto é utilizar um ID, já que esse será um elemento único na página.*/&lt;/span&gt;

&lt;span class="nf"&gt;#container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e8c547&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;h2&gt;
  
  
  Agora, finalmente, como esses seletores devem ser utilizados corretamente?
&lt;/h2&gt;

&lt;p&gt;Depois dessa breve explanação, fica mais fácil entender quando devemos usar uma class ou um id. Entende-se que, para uma melhor utilização de classes ou ids, é recomendável seguir essas práticas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se você aplicou um id para um elemento, ele deve ser aplicado &lt;strong&gt;apenas&lt;/strong&gt; àquele elemento em toda a sua página;&lt;/li&gt;
&lt;li&gt;Mas caso você tenha utilizado uma classe, você pode utilizá-la em &lt;strong&gt;qualquer elemento&lt;/strong&gt; da sua página, sempre que for necessário;&lt;/li&gt;
&lt;li&gt;Lembre-se: um elemento pode aceitar, simultaneamente, uma classe e um id. Porém, tome um pouco de cuidado com essa utilização: caso exista uma declaração "conflitante" de classes e id (exemplo: id e classes com o mesmo nome), por ser mais específico que as classes, o id será priorizado, não importa a ordem em que ele esteja declarado no seu documento CSS. Exemplo:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--O id é único desse elemento div, já a classe 'font' pode ter sido/ser utilizada em quaisquer outros elementos da página--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"link"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"font"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Além disso, você também pode utilizar duas ou mais classes, se quiser:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!--'font' é uma classe e 'box' é outra. Elas são inseridas juntas, dessa forma:--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"font box"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Nesse post tivemos uma breve explicação sobre maneiras de aplicar estilo em HTML a partir do CSS, as diferenças entre os seletores &lt;strong&gt;class&lt;/strong&gt; e &lt;strong&gt;id&lt;/strong&gt; e como utilizar cada um desses seletores a fim de evitar conflitos e problemas de semântica.&lt;/p&gt;

&lt;p&gt;Esse foi meu primeiro post no blog! Caso tenham gostado ou queiram me enviar sugestões, dúvidas ou críticas, fiquem à vontade para comentar esse post ou me chamar lá no twitter &lt;a href="https://twitter.com/anestudies" rel="noopener noreferrer"&gt;@anestudies&lt;/a&gt; ;) Até breve!&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://tableless.github.io/iniciantes/manual/html/oquetags.html" rel="noopener noreferrer"&gt;https://tableless.github.io/iniciantes/manual/html/oquetags.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/pt-BR/docs/Learn/CSS/Building_blocks/Selectors" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Learn/CSS/Building_blocks/Selectors&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
