<?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: Wellington Mitrut</title>
    <description>The latest articles on DEV Community by Wellington Mitrut (@wmitrut).</description>
    <link>https://dev.to/wmitrut</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%2F146411%2F33f32362-904a-41a1-aedc-1ebae11012b7.jpg</url>
      <title>DEV Community: Wellington Mitrut</title>
      <link>https://dev.to/wmitrut</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wmitrut"/>
    <language>en</language>
    <item>
      <title>#006 - Operadores Lógicos</title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Thu, 03 Jun 2021 16:41:22 +0000</pubDate>
      <link>https://dev.to/wmitrut/006-operadores-logicos-22gh</link>
      <guid>https://dev.to/wmitrut/006-operadores-logicos-22gh</guid>
      <description>&lt;p&gt;Antes de tudo, obrigado pelos acessos que vocês tem dado à estes posts, eu tentarei continuar a faze-los com a mesma frenquencia semanal. Para mais posts de diferentes assuntos acesse meu blog: blog.wmitrut.co&lt;/p&gt;

&lt;p&gt;Coloca esse álbum do Nektar que eu econtrei essa semana e manda ver:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/album/3FP4eu71M2c09h8M4PyM4p" width="100%" height="380px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F5xawzg24iy9mspxuya2j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F5xawzg24iy9mspxuya2j.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Operadores lógicos são operadores que retornam valores booleanos. Além de &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;e &lt;code&gt;false&lt;/code&gt;, estes operadores podem retornar verdadeiros e falseáveis.&lt;/p&gt;

&lt;p&gt;Os valores falseáveis não necessariamente são só &lt;code&gt;false&lt;/code&gt;. Existem 6 valores que podem ser considerados falseáveis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;NaN&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="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Todos os valores verdadeiros são aqueles que não são falseáveis. Lembra da tabela verdade? Abaixo anexo uma aula bem completa sobre tabela verdade e valores verdadeiros e falseáveis.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/s_9HNbY4Zek"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Em Javascript isto pode ser representado da seguinte maneira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&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;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;//Se utilizarmos o conectivo &amp;amp;&amp;amp; - AND/E, ambos os valores&lt;/span&gt;
&lt;span class="c1"&gt;//tem que ser verdadeiros&lt;/span&gt;

&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="c1"&gt;//retorna false&lt;/span&gt;

&lt;span class="c1"&gt;//Se utilizarmos o conectivo || - OR/OU, ao menos um dos valores &lt;/span&gt;
&lt;span class="c1"&gt;// tem que ser verdadeiro&lt;/span&gt;
&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="c1"&gt;//retorna true&lt;/span&gt;

&lt;span class="c1"&gt;//Já o operador ! - NOT/NÃO, retorna false se for verdadeiro e &lt;/span&gt;
&lt;span class="c1"&gt;//verdadeiro se for falseável&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="c1"&gt;// retorna false&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="c1"&gt;// retorna true&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mitrut&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// retorna false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, para saber a ordem de chamada, pense sempre na ordem normal matemática. Na próxima semana iremos tratar de Condicionais em javascript e depois cair de cabeça em um dos assuntos mais extensos e legais de JS: ARRAYS.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>frontend</category>
      <category>basics</category>
    </item>
    <item>
      <title>#005 Basicão do JS:  Operadores Aritméticos</title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Fri, 28 May 2021 14:25:52 +0000</pubDate>
      <link>https://dev.to/wmitrut/005-operadores-aritmeticos-4mlc</link>
      <guid>https://dev.to/wmitrut/005-operadores-aritmeticos-4mlc</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--arMqf4E_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/li76o5i8hwolzk45mdfh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--arMqf4E_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/li76o5i8hwolzk45mdfh.jpg" alt="O professor Jirafales"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dizia eu que a aritmética... Os chamados  operadores aritméticos são utilizados para a realização de cálculos simples em JS, como soma, subtração, divisão e multiplicação, além de algumas operações menos conhecidas mas que você deve lembrar da escola o módulo (resto inteiro da divisão) e o incremento e decremento.&lt;/p&gt;

&lt;p&gt;Para mais detalhes matematicos sobre módulo, veja o vídeo abaixo:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/m4CYmd_lGmo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Ou seja, se eu quiser dividir 12 laranjas para 5 pessoas, em javascript eu tenho:&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;//Levando em conta que 12/5 = 2,4&lt;/span&gt;
&lt;span class="c1"&gt;//e eu preciso saber de forma exata o módulo, então:&lt;/span&gt;

&lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pois 2 é a parte inteira de 2,4.&lt;/p&gt;

&lt;p&gt;Já  incrementar significa aumentar o valor de algo, e decrementar significa diminuir o valor de algo. &lt;/p&gt;

&lt;p&gt;Vamos por exemplo imaginar uma fila de gatinhos:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--osG014_R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/75u8ndof8whnxqpqy23f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--osG014_R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/75u8ndof8whnxqpqy23f.png" alt="Fila de gatos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Temos a nossa variável &lt;code&gt;gatos&lt;/code&gt; que vai começar com um valor 1.&lt;/p&gt;

&lt;p&gt;Para cada gato que eu ver nessa fila, eu vou querer automaticamente adicionar valor à minha variável &lt;code&gt;gatos&lt;/code&gt;. Então para representar essa operação aritmética basta que eu declare que cada vez que um gato desta fila seja visto ele faça a operação &lt;code&gt;gato++&lt;/code&gt; ou &lt;code&gt;++gato&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Qual a diferença de mostrar antes ou depois?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;gatos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nx"&gt;gatos&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="c1"&gt;// retorna valor 1 então seta gatos com o valor 2 &lt;/span&gt;
&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="nx"&gt;gatos&lt;/span&gt; &lt;span class="c1"&gt;// seta gatos com valor 2 então retorna o valor 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Decremento faz a exata mesma operação mas subtraindo o valor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;gatos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="nx"&gt;gatos&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="c1"&gt;// retorna valor 4 então seta gatos com o valor 3&lt;/span&gt;
&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;gatos&lt;/span&gt; &lt;span class="c1"&gt;// seta gatos com valor 3 então retorna o valor 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Abaixo segue a lista dos operadores aritméticos. Para saber a ordem correta de utiliza-los e qual tem prioridade sobre o outro, volte no post anterior desta série e veja o vídeo de 1 minuto incorporado.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operador&lt;/th&gt;
&lt;th&gt;Significado&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;Soma&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Subtração&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;Multiplicação&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;Divisão&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;Módulo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;++&lt;/td&gt;
&lt;td&gt;Incremento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--&lt;/td&gt;
&lt;td&gt;Decremento&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Semana que vem:&lt;/em&gt; Operadores Lógicos&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>frontend</category>
      <category>basics</category>
    </item>
    <item>
      <title>#004 Basicão do JS: Operadores de comparação</title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Thu, 20 May 2021 14:28:46 +0000</pubDate>
      <link>https://dev.to/wmitrut/004-basicao-do-js-operadores-de-comparacao-4p9g</link>
      <guid>https://dev.to/wmitrut/004-basicao-do-js-operadores-de-comparacao-4p9g</guid>
      <description>&lt;p&gt;Vamos continuar a série do básicão do Javascript hoje com operadores de comparação, um assunto rápido mas crucial para entender qualquer linguagem de programação.&lt;/p&gt;

&lt;p&gt;Coloca o álbum do Alice in Chains pra tocar e segue o jogo&lt;/p&gt;

&lt;p&gt;&lt;iframe width="100%" height="380px" src="https://open.spotify.com/embed/album/4AAPRl8BKlsIVC5aeedlBv"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wOVez7HJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvagjg6kgoiramtztws5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wOVez7HJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvagjg6kgoiramtztws5.jpg" alt="Gatinho enfermeiro"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Um pouco de matemática
&lt;/h2&gt;

&lt;p&gt;Seguindo nossa série de posts sobre o basicão do Javascript, hoje trago pra vocês os operadores. O que são operadores? Se você já estudou matemática na escola, provavelmente já conhece os principais :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;+ &lt;span class="o"&gt;(&lt;/span&gt;adição&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
- &lt;span class="o"&gt;(&lt;/span&gt;subtração&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
× &lt;span class="o"&gt;(&lt;/span&gt;multiplicação&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
÷ &lt;span class="o"&gt;(&lt;/span&gt;divisão&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;igualdade&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acontece que geralmente os sinais de × (multiplicação),  ÷ (divisão) são substituídos em algumas linguagens por * e / respectivamente pois os símbolos são muito semelhantes a letras que podemos usar como nome de variável como é o caso da multiplicação ou geralmente não estão em todos os tipos de teclado, já estes dois símbolos estão bem acessíveis.&lt;/p&gt;

&lt;p&gt;Tá com problema pra lembrar como cada um funciona e sua ordem? Segue abaixo um vídeo explicando em menos de um minuto, não é vergonha não saber ou não lembrar, vergonha é continuar na ignorância.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/JQGQu51W6cY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Mas são só nas operações matemáticas que eu utilizo esses operadores? Não,  e não são apenas estes operadores básicos. Os operadores são uma parte extremamente importante pois são eles que fazem a mágica acontecer. Vamos aprender os tipos de operadores em JS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operadores de comparação
&lt;/h2&gt;

&lt;p&gt;Operadores de comparação servem para como diz seu nome, comparar dois valores distintos e retornam um resultado booleano (verdadeiro = true ou falso = false) com base na operação.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CVylF8sP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/szrrw9a467pxoi9j8239.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CVylF8sP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/szrrw9a467pxoi9j8239.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bem simples não é? Notação fácil de decorar e bem semelhante a matemática comum. Tudo parece um mar de rosas aqui até que você encontra uma particularidade do Javascript. Por não ser uma linguagem fortemente tipada, posso somar um números com string. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Posso somar 1 + '1'&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E eu posso gerar umas bizarrices lógicas como a seguir:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dWCFRYz0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ca08sauufhonx4jsdgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dWCFRYz0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ca08sauufhonx4jsdgy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O javascript está tentando mudar totalmente ambos para um tipo que possa comparar os dois, o que nos leva a entender a diferença entre usar igualdade (==) e igualdade estrita (===).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mIeCm9R9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wqy78ut63ljpop9p1w9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mIeCm9R9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wqy78ut63ljpop9p1w9a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com a igualdade estrita você está forçando o Javascript a comparar não só o valor como o tipo de dado  que está sendo colocado e tipos de dados nós já vimos lá no primeiro post. &lt;br&gt;
Esse tipo de problema é facilmente detectado por ESLint por exemplo e já foi resolvido por supersets como Typescript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NnRrh0FA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/85xf241b1ro6su9vsgum.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NnRrh0FA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/85xf241b1ro6su9vsgum.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Operadores de designação
&lt;/h2&gt;

&lt;p&gt;Já vimos de forma indireta os operadores de designação por aqui, são aqueles que usamos para atribuir valores a variáveis com base no valor de igualdade, ou seja, são &lt;strong&gt;combos&lt;/strong&gt; de operações.&lt;/p&gt;

&lt;p&gt;Abaixo uma tabela de notação para você ter uma referencia em como isso funciona:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XjPor-Ay--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7kv81wme1rx49hyf66pq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XjPor-Ay--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7kv81wme1rx49hyf66pq.png" alt="Operadores de designação"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SEMANA QUE VEM: Operadores Aritméticos&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Links e Fontes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;▶ 🔗 &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators"&gt;Boa e Velha MDN&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▶ 🔗 Acompanhe as lives do &lt;a href="https://www.twitch.tv/pokemaobr"&gt;POKEMÃO&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;▶ 🎬 Esta talk do Justin Jackson sobre saúde mental de desenvolvedores:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/AfEBby1KRyU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;E mais&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;▶ FIQUE EM CASA, COMPRE LOCAL, LAVE A MÃO E USE MÁSCARA.&lt;/p&gt;

&lt;p&gt;▶ Você não é obrigado a ser produtivo neste momento, cuide dos seus&lt;/p&gt;

&lt;p&gt;▶ Leia, e leia muito se possível. Mas também se respeite e descanse.&lt;/p&gt;

&lt;p&gt;▶  Tome vacina. Não existe tratamento precoce, Fora Bolsonaro.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://www.twitch.tv/wmitrut"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xddOdy9H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1ziictmcl897ws98mvp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Lighthouse é meu pastor...</title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Sat, 15 May 2021 15:08:00 +0000</pubDate>
      <link>https://dev.to/wmitrut/lighthouse-e-meu-pastor-2ee1</link>
      <guid>https://dev.to/wmitrut/lighthouse-e-meu-pastor-2ee1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Publicado originalmente em 03/2019&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fydlmr0nkm0xqpdqkk8ut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fydlmr0nkm0xqpdqkk8ut.png" alt="Foto de um farol por Adrien Tutin, obtida no Unsplash"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Photo by Adrien Tutin on Unsplash&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Continuando nossa série sobre PWAs, Performance e UX, trago dessa vez uma das ferramentas essenciais para quem quer construir um PWA incrível. O &lt;strong&gt;Lighthouse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Segundo o Google, criador da ferramenta&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O Lighthouse é uma ferramenta automatizada de código aberto que aprimora a qualidade de apps da Web. Ele pode ser executado como extensão do Chrome ou na linha de comando. Informe ao Lighthouse um URL que você quer auditar. Ele executará uma série de testes na página e gerará um relatório sobre o desempenho da página. Nesse relatório, você poderá usar os testes que apresentaram falha como indicadores do que pode ser feito para aprimorar o aplicativo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ou seja, é uma ferramenta que vai fazer toda uma varredura da sua aplicação e lhe dar um relatório com todas as dicas do que pode ser feito para melhorar sua performance.&lt;/p&gt;

&lt;p&gt;Durante muito tempo o lighthouse foi uma &lt;a href="https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk" rel="noopener noreferrer"&gt;extensão do chrome&lt;/a&gt;, mas hoje, desde o Chrome 60 (na data da publicação deste post ele estava na 72) ele vem embutido no Chrome Dev Tools na aba &lt;strong&gt;Audits&lt;/strong&gt;. Você pode acompanhar o projeto no Github &lt;a href="https://github.com/GoogleChrome/lighthouse" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Qnmb2YhkQmQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Vídeo do release do Chrome 60 explicando a adição do Lighthouse nos Audits.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Uma mão na roda né?&lt;/p&gt;

&lt;h3&gt;
  
  
  Mas Mitrut, eu nunca ouvi falar nisso!
&lt;/h3&gt;

&lt;p&gt;Tudo bem, estamos aqui pra isso. Este blog foi construido totalmente de olho no que ocorre no score do lighthouse dele - ou seja. Pensado para ter performance e um score alto. No &lt;a href="https://blog.wmitrut.com/welcome-back/" rel="noopener noreferrer"&gt;post anterior&lt;/a&gt; eu mostrei o score básico e como este blog foi construido para ser um PWA:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F8bi17ur97wfdmmyblqxv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F8bi17ur97wfdmmyblqxv.png" alt="Resultados do Blog no Lighthouse"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Resultados do Blog no Lighthouse&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Usando o lighthouse
&lt;/h3&gt;

&lt;p&gt;Partindo do princípio que você está utilizando o Google Chrome como navegador na versão 60+ desktop aperte:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Windows/Linux&lt;/em&gt;: F12 ou Ctrl+Shift+I&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;MacOs&lt;/em&gt;: Cmd + Option + I&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Todas&lt;/em&gt;: Botão direito &amp;gt; inspecionar&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Observação: O lighthouse só pode ser usado no desktop.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Isso vai abrir o seu Chrome Dev Tools. Procure pela aba Audits:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fkwkh7p2rlll7d6lt5q7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fkwkh7p2rlll7d6lt5q7p.png" alt="Chrome Dev Tools"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quando você abrir esta aba, ele já vai te mostrar o Lighthouse com todas as opções possíveis para serem auditadas, sendo elas: &lt;em&gt;Performance&lt;/em&gt;, &lt;em&gt;Progressive Web App&lt;/em&gt;, &lt;em&gt;Best Pratices&lt;/em&gt;, &lt;em&gt;Accessibility&lt;/em&gt; e &lt;em&gt;SEO&lt;/em&gt; - sim, SEO, ele te ajuda desde como seu app está se comportando performaticamente até de como ele pode ser melhor indexado pelos buscadores.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F7q9rbrrqj3e7v1fdd2k0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F7q9rbrrqj3e7v1fdd2k0.png" alt="A aba audits"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ainda existem opções de teste para mobile e desktop, bem como simular redes para ver como ele se sai em 3Gs e afins. Pense no lighthouse como um Pagespeed com esteróides.&lt;/p&gt;

&lt;p&gt;Agora, depois de selecionados os filtros, é só clicar em &lt;strong&gt;Run Audits&lt;/strong&gt; e esperar. Ele vai demorar mesmo (uns 30 - 40 s), vai fazer uma varredura completa no seu app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F2nrzkbldt2pakq2sltd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F2nrzkbldt2pakq2sltd0.png" alt="Rodando os Audits"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neste meio tempo ele testa tudo: como seu site se comporta em redes móveis lentas, se ele tem webapp manifest, como ele se comporta com JS desabilitado, se ele possui suporte offline, se ele é acessível, como estão as chamadas de JS e se elas demoram muito e no final ele te dá um relatorio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fytlsvl2ny1gz3et4xyvt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fytlsvl2ny1gz3et4xyvt.png" alt="Resultados do Blog no Lighthouse"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;É importante salientar que você não precisa perder o sono se seu app não bateu 100% de primeira em tudo, muitos blogs, sites e apps já o fazem mas se você ainda não chegou lá tudo bem. O importante é você estar preocupado com estas métricas.&lt;/p&gt;

&lt;p&gt;Meu blog antigo passou pelo lighthouse com os seguintes resultados:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Flre8xfgq39yok4och0jl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Flre8xfgq39yok4och0jl.png" alt="Resultados do Blog antigo no Lighthouse"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Entendendo o relatório
&lt;/h3&gt;

&lt;p&gt;As 5 seções do lighthous que já citamos aqui possuem subsessões que são os checks auditados. Caso esteja tudo bem em uma sessão você vai encontrar o seguinte:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fzgs7shgbam929hnqn2gx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fzgs7shgbam929hnqn2gx.png" alt="Resultados da auditoria de PWA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Senão...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fkj1eh8tjsz0wdn4y68k1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fkj1eh8tjsz0wdn4y68k1.png" alt="Resultados da auditoria de PWA ruim"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E é aqui que você vai pegar as dicas principais do que você precisa melhorar. O lighthouse vai te dar dicas do que pode ser feito para melhorar o score, coisas tais quais: criar um webapp manifest, suporte offline, minificar JS, requisições que estão bloqueando a renderização, classes css não utilizadas, falta de metatags importantes...&lt;/p&gt;

&lt;p&gt;Aqui entra um outro post que veremos futuramente sobre padrão PRPL de entrega de assets para sua aplicação rodar, o que é intrinsecamente ligado ao Lighthouse e performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Usando Lighthouse no CI
&lt;/h3&gt;

&lt;p&gt;Digamos que você já está habituado com o Lighthouse e possui um serviço de integração contínua tal qual o TravisCI. É possível automatizar a checagem do Lighthouse e colocar "metas" de score.&lt;/p&gt;

&lt;p&gt;Para isso existe o &lt;a href="https://github.com/GoogleChromeLabs/lighthousebot" rel="noopener noreferrer"&gt;LighthouseBot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fhdml9gvqxcsddx93ahc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fhdml9gvqxcsddx93ahc0.png" alt="LighthouseBot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O LighthouseBot pode ser colocado junto à sua integração e deixar essa checagem automatica e mais fácil, ele comenta nos seus pull requests e ainda pode impedir que um build ruim vá para produção&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fdiafyly2b08vmhw0mnxx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fdiafyly2b08vmhw0mnxx.png" alt="Métricas LighthouseBot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Abaixo você pode ver um build com lighthouse com métricas ruins sendo barrado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fa0np1xeqmypnhwkyzksy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fa0np1xeqmypnhwkyzksy.png" alt="Checks do LighthouseBot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  CLI
&lt;/h3&gt;

&lt;p&gt;Sim, também é possível rodar o lighthouse via CLI - para quem prefere ter o Firefox como navegador é uma boa pedida. Para testar o CLI é só instalar:&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;npm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt; &lt;span class="nx"&gt;lighthouse&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de instalado você roda apenas&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;lighthouse&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sendo que  é o parâmetro da URL  a ser auditada. Existe uma série de flags que podem ser adicionadas como --verbose,  --output json e etc. para personalizar o report ao seu gosto.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://github.com/GoogleChrome/lighthouse#readme" rel="noopener noreferrer"&gt;documentação&lt;/a&gt; é bem completa e vai te ajudar com tudo. Ele gerará um arquivo HTML com as mesmas informações que você vê no Audits do Chrome Dev Tools.&lt;/p&gt;

&lt;p&gt;Ainda existe uma série de integrações interssantes e possíveis com ele bem como uma gama enorme de projetos derivados.&lt;/p&gt;

&lt;p&gt;Abaixo um vídeo com mais detalhes de como usar o Lighthouse:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/UvK9zAsSM8Q"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h3&gt;
  
  
  Enfim...
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fq7xap6gvkd6zo751zgln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fq7xap6gvkd6zo751zgln.png" alt="Logo do lighthouse"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você se importa com performance e você &lt;strong&gt;&lt;em&gt;DEVE&lt;/em&gt;&lt;/strong&gt; se importar, o lighthouse é uma ferramenta indispensável para se criar um bom PWA. Indico aqui dois posts para que você se aprofunde mais no assunto, um do &lt;a href="https://addyosmani.com/blog/shine-a-light-javascript-performance/" rel="noopener noreferrer"&gt;Addy Osmani&lt;/a&gt; e outro  &lt;a href="https://willianjusten.com.br/medindo-performance-do-seu-site-com-lighthouse/" rel="noopener noreferrer"&gt;post&lt;/a&gt; onde o William Justen também fala da experiência dele em melhorar o seu blog e ter um bom score no lighthouse.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Mais uma coisa&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;▶ FIQUE EM CASA, COMPRE LOCAL, LAVE A MÃO E USE MÁSCARA.&lt;/p&gt;

&lt;p&gt;▶ Você não é obrigado a ser produtivo neste momento, cuide dos seus&lt;/p&gt;

&lt;p&gt;▶ Leia, e leia muito se possível. Mas também se respeite e descanse.&lt;/p&gt;

&lt;p&gt;▶  Tome vacina. Não existe tratamento precoce, Fora Bolsonaro.&lt;/p&gt;

&lt;p&gt;▶  Não caia em papo de dev coach nóia.&lt;/p&gt;

&lt;p&gt;▶ O meu projetinho que você pode contribuir, o &lt;a href="https://github.com/Wmitrut/awesome-brazilian-devblogs" rel="noopener noreferrer"&gt;AWESOME BRAZILIAN DEV BLOGS&lt;/a&gt;. Uma compilação de blogs de desenvolvedores e comunidades brasileiros que estejam em PORTUGUÊS. Visa ser um hub/ponto de partida pra quem busca bom conteúdo de desenvolvimento em português - PRs bem vindas!&lt;/p&gt;

&lt;p&gt;▶ Como a Netflix fez o Bandersnatch do ponto de vista de desenvolvimento:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/WLqc0EX8Bmg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/wmitrut" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fr1ziictmcl897ws98mvp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ux</category>
      <category>webdev</category>
      <category>performance</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Amanteigando a percepção do usuário</title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Sat, 15 May 2021 14:39:26 +0000</pubDate>
      <link>https://dev.to/wmitrut/amanteigando-a-percepcao-do-usuario-51ik</link>
      <guid>https://dev.to/wmitrut/amanteigando-a-percepcao-do-usuario-51ik</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Originalmente publicado em Outubro/2018&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Depois de um longo tempo sem publicar, continuo o post sobre como transformar seu PWA em um 'aplicativo de verdade'.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ozdzLlko--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kuw7gi5vlepgwjiutaax.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ozdzLlko--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kuw7gi5vlepgwjiutaax.jpeg" alt="Pão com manteiga"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Olá pessoal, depois de um longo tempo sem publicar, resolvi sentar a bunda na cadeira e fazer este texto sair da cabeça e ganhar vida. Caso você tenha perdido a parte 1, tenha chegado aqui por algum outro meio de busca e não tenha lido o primeiro texto da série, veja no blog o post Parte 1.&lt;/p&gt;

&lt;h3&gt;
  
  
  Carga Cognitiva
&lt;/h3&gt;

&lt;p&gt;Se você já leu o texto, pois bem, terminamos o último falando sobre um problema de UX bem comum chamado  CARGA COGNITIVA.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Segundo a &lt;a href="https://pt.wikipedia.org/wiki/Esfor%C3%A7o_cognitivo"&gt;wikipedia&lt;/a&gt;, &lt;em&gt;carga cognitiva&lt;/em&gt; se refere ao nível de utilização de recursos psicológicos como memórias, atenção, percepção, representação de conhecimento, raciocínio e criatividade na resolução de problemas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ou seja, para nós que trabalhamos com PWA, é interessante que venhamos a utilizar convenções e padrões já utilizados em aplicações ditas nativas, isso também não quer dizer que absolutamente todo app que você faz tem que ser em material design ou cupertino components (Apple Design), mas sim que você pode tirar o melhor de cada e criar experiências incríveis.&lt;/p&gt;

&lt;p&gt;Quanto menos desgastarmos nosso usuário aprendendo a navegar na nossa aplicação, maior pode ser o engajamento dele com o que fizemos.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se você quiser se aprofundar um pouco mais sobre carga cognitiva em UX, segue um texto abaixo do &lt;a href="https://coletivoux.com/princ%C3%ADpios-do-design-para-reduzir-a-carga-cognitiva-do-usu%C3%A1rio-2c947b9fab96"&gt;Coletivo UX&lt;/a&gt; pra explorar isto um pouco mais.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No texto anterior falamos dos problemas e neste falaremos dos princípios que ajudarão a resolver isto, são eles: REATIVIDADE, PREVISIBILDADE e USUÁRIO NO CONTROLE.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A percepção humana de tempo é fluida, e pode ser manipulada de maneira proposital e produtiva. — Chris Harrison, Zhiquan Yeo, Scott E. Hudson&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yk3k2Y8R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/teyhg98lsb3blfqj82bf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yk3k2Y8R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/teyhg98lsb3blfqj82bf.gif" alt='"Dormammu, i came here to bargain!"'&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Embora a frase acima pareça saída dos ensinamentos que a Grande Anciã passou para Stephen Strange, ela veio na verdade de professores, UX designers e é a pura verdade.&lt;/p&gt;

&lt;p&gt;O próprio &lt;a href="https://twitter.com/breakzplatform"&gt;Joselito&lt;/a&gt; fala em suas palestras que mais importante que ser é parecer ser, então com base nisso apresentarei alguns exemplos interessantes de como podemos moldar a percepção de performance que nossos usuários tem sem ter que usar o olho de Agamoto.&lt;/p&gt;

&lt;h2&gt;
  
  
  SKELETON SCREEN
&lt;/h2&gt;

&lt;p&gt;Você já deve ter visto uma skeleton screen, só não sabia que ela se chamava assim. Se você possui facebook, esse tipo de tela pode ser bem comum quando você está num 3G. É aquela tela que mostra quando você abre o app e ele ainda não carregou os dados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u4KKwjjm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxe7g6bifk58jdxulqhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u4KKwjjm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxe7g6bifk58jdxulqhb.png" alt="Skeleton Screen do facebook"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existem casos em que a tela só muda quando a nossa request de dados está completa e isso é ruim do ponto de vista de quem está esperando. Nosso senso de percepção de mudança gira em torno de 400ms. Imagina que seu usuário numa internet ruim — ele clica, clica, clica e nada acontece. Pronto, o usuário já xingou sua mãe, fechou a aplicação e foi atrás do seu concorrente (ok, um pouco menos de drama, mas a gente sabe que acontece).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ah mas o usuário que espere a request, eu não posso fazer nada até que tenha a resposta.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Em partes sim, o usuário que espere. Não tem como você apressar uma conexão lenta. Porém você pode dar um feedback pro seu usuário. Como? Jogando a próxima view em tela e pré-populando com uma skeleton screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kZNTD55U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncfkgozdeq4uhb263eb6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kZNTD55U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncfkgozdeq4uhb263eb6.gif" alt="Gif do medium carregando"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fiz até esse teste aqui no Medium para exemplificar. Por mais rápido que seja o gif, note:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Eu clico no post&lt;/li&gt;
&lt;li&gt;Ele dispara a request&lt;/li&gt;
&lt;li&gt;Ele abre a view do post pré-populada com uma estrutura básica de esqueleto&lt;/li&gt;
&lt;li&gt;Ele monta a árvore do DOM com base nos dados da request&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;É fácil entender a forma com que isso ocorre, são aproximadamente 3 a 4 segundos em uma internet boa, perceba que em nenhum momento fiquei com tela em branco ou com a tela ‘congelada’, então na próxima vez que você for montar uma UI, pense em estratégias de como montar uma tela ‘fake’ para que seu usuário não ache que seu aplicativo simplesmente travou.&lt;/p&gt;

&lt;h3&gt;
  
  
  APPLICATION SHELL
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mh0GFXR0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/673nwxwjfpba9wdzvvwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mh0GFXR0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/673nwxwjfpba9wdzvvwl.png" alt="Exemplo de application shell"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você acompanha pwas desde o início, já deve saber que esta imagem é mais velha que o jQuery, o Tim Bernerss Lee e a vó do Badanha juntos.&lt;/p&gt;

&lt;p&gt;Assim como a skeleton screen temos a application shell, que mostra a estrutura básica da aplicação. É estrutura mesmo, antes de conteúdo, sendo apresentada de forma quase instantânea na tela do usuário, muito parecido com o que se vê em aplicativos nativos.&lt;/p&gt;

&lt;p&gt;O shell é composto pelos aplicativos mínimos necessários para montar a tela e se tratando de pwa é uma boa prática mantê-los armazenados em cache off-line para um próximo acesso, sendo assim, ele não será carregado toda vez que a aplicação for acessada, você deixará que apenas o conteúdo estritamente necessário seja carregado. Para SPAs, essa estratégia é essencial — geralmente esse tipo de aplicação possui uma carga enorme, deixar que isso seja carregado toda vez tem um impacto monstruoso em performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  MUDAR A UI CONFORME O SISTEMA OPERACIONAL
&lt;/h3&gt;

&lt;p&gt;Eu sei o que você está pensando. É chato, é trabalhoso — mas uma verdade dita desde que o cross-platform existe é: "Aplicativo iOs tem que parecer aplicativo iOs e aplicativo Android tem que parecer aplicativo Android".&lt;/p&gt;

&lt;p&gt;Com isso em mente, faz-se interessante utilizar uma regra de css em cada OS e isso é possível&lt;/p&gt;

&lt;p&gt;Esse &lt;a href="https://webapp.barcelona.cat/pics/"&gt;pwa da prefeitura de Barcelona&lt;/a&gt; tem uma UI de acordo com o OS que você estiver utilizando&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MiFYZfA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/17tji7iq3fout0omcpvs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MiFYZfA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/17tji7iq3fout0omcpvs.png" alt="Pwa de barcelona"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alguns frameworks como Ionic já fazem isso também, é interessante que as estratégias sejam estudadas pois a entrega deste tipo de experiência agrega muito para seu usuário — tudo parece mais natural.&lt;/p&gt;

&lt;h3&gt;
  
  
  FEEDBACK DE TOQUE
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gv2Qhnr_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oh1h74yv5k5qkqw1rw5j.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gv2Qhnr_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oh1h74yv5k5qkqw1rw5j.jpeg" alt="Mobile statistics"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seu usuário está acessando sua aplicação de um dispositivo móvel, você sabe que é verdade, o mouse dele é um dedo — NÃO EXISTE HOVER.&lt;/p&gt;

&lt;p&gt;Dar feedback de toque é essencial, então pelo amor de Addy Osmani, cuide com os feedbacks de toque, seja utilizando ripple ou tilt, ou então o ::active do css. Você deve prover feedback de UI para seu usuário. Abaixo algumas libs interessantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rikschennink.github.io/tilt/#demo"&gt;TILT.JS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/samthor/rippleJS"&gt;RIPPLE.JS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Se você leu até agora e se perguntou, como faríamos para jogar os recursos básicos iniciais para montar a tela e ficou achando que eu era meio maluco de querer fazer preload de tudo, saiba que aí é que irei parar de falar um pouco de UX/UI, olhar um pouco melhor para técnicas, estratégias e explorar a técnica do padrão PRPL — tudo isso no nosso próximo post!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;E mais&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;▶ FIQUE EM CASA, COMPRE LOCAL, LAVE A MÃO E USE MÁSCARA.&lt;/p&gt;

&lt;p&gt;▶ Você não é obrigado a ser produtivo neste momento, cuide dos seus&lt;/p&gt;

&lt;p&gt;▶ Leia, e leia muito se possível. Mas também se respeite e descanse.&lt;/p&gt;

&lt;p&gt;▶  Tome vacina. Não existe tratamento precoce, Fora Bolsonaro.&lt;/p&gt;

&lt;p&gt;▶  Não caia em papo de dev coach nóia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/wmitrut"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xddOdy9H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1ziictmcl897ws98mvp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>ux</category>
      <category>pwa</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Can’t Believe It’s not NATIVE! </title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Sat, 15 May 2021 14:22:41 +0000</pubDate>
      <link>https://dev.to/wmitrut/i-can-t-believe-it-s-not-native-5lo</link>
      <guid>https://dev.to/wmitrut/i-can-t-believe-it-s-not-native-5lo</guid>
      <description>&lt;p&gt;Vamos combinar duas coisas aqui antes de começar, a primeira é que SIM, os PWA são o presente e não mais o futuro, um monte de empresas já estão usando esse paradigma: Forbes, AliBaba, Flipkart e etc.&lt;/p&gt;

&lt;p&gt;A segunda é: seu usuário não liga se a aplicação é feita em JS, Kotlin, C# ou então se é feito com uma planilha do Access. O que ele quer é que resolva o problema dele, então, sem preconceito com linguagem, paradigma ou seja lá o que mais você quiser implicar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I Can’t believe is not native não é um manifesto, o que está aqui não é lei! É o sentimento que você desenvolvedor/Designer, independente da tecnologia utilizada tem que fazer seu usuário ter. Ele tem que usar seu PWA e nem PERCEBER que aquilo talvez não seja um aplicativo tradicional.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mas pra começar a falar de Progressive Web Apps a gente tem que voltar um pouco no tempo, tipo, lá nos anos 90. Então bora lembrar da época em que você colecionava tazo, cd do Nirvana e tocava É o Tchan! sem parar.&lt;/p&gt;

&lt;p&gt;No início, a web não foi pensada como uma grande plataforma de aplicações poderosa como é hoje. Ela era apenas como uma grande enciclopédia Barsa interativa na qual você ‘navegava’ entre páginas de texto, via algumas imagens e assim por diante. A estruturação e as linguagens de marcação sintetizavam na tela a semelhança do que acontecia em publicações e papers dos anos 90.&lt;/p&gt;

&lt;p&gt;Com a popularização da tecnologia, viu-se a necessidade de criar estruturas e artifícios que fizessem da web algo mais atrativo e fácil de usar. Porém nem tudo são flores, além de não ser da noite para o dia, a criação destes artifícios foi sempre marcada por abstrações ‘desvios’, fazendo com que o desenvolvedor web fosse uma espécie de MacGyver e se virasse com o que tinha disponível.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AeoLk-CR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t8v4ccdl7v0lf3k74ruj.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AeoLk-CR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t8v4ccdl7v0lf3k74ruj.jpeg" alt="MacGyver, o webdev dos anos 90 e 00"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A web não foi projetada para ter aplicações ricas, mas sim documentos, tudo que você vê no seu navegador são abstrações de arquivos de texto e isso é maravilhoso!&lt;/p&gt;

&lt;p&gt;Mas se é tão maravilhoso, por que é que a web ainda não passa uma uma confiança, uma firmeza como as aplicações nativas passam?&lt;/p&gt;

&lt;p&gt;Nós tivemos que reinventar a web com o que tínhamos em mãos, não tivemos que reescrever do zero para que ela se tornasse incrível, mas fomos refatorando sempre. O problema é que, como toda obra cheia de puxadinhos, melhorias ao longo dos anos, sempre fica alguma coisa pra trás. E justamente, a gente foi fazendo as coisas como dava.&lt;/p&gt;

&lt;p&gt;Hoje, esta incerteza e experiência de usuário quebrada na web se devem a 3 fatores:&lt;/p&gt;

&lt;h2&gt;
  
  
  1 — Sites não são reativos
&lt;/h2&gt;

&lt;p&gt;Como no exemplo abaixo, o site não tem um carregamento interessante quando o link é clicado, o conteúdo não tem uma transição, ele apenas aparece em tela.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--enFQawV3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncdmjhd02pl62cnwku4l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--enFQawV3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncdmjhd02pl62cnwku4l.gif" alt="Não reativo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2 — Sites não tem um comportamento previsível
&lt;/h2&gt;

&lt;p&gt;Reforçando o argumento anterior, sites em geral não se comportam como se espera de um aplicativo, cada um tem uma forma de ser executado, em geral não possuem suporte à gestures, embora as vezes pareça claro que algo está para acontecer se gestos forem usados. Note abaixo como o usuário tenta chamar o menu lateral e não consegue por gestos, o que num aplicativo nativo isso seria o esperado com o menu hamburguer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8-xrJojn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfgzn9ixfl72kky8obdr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8-xrJojn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfgzn9ixfl72kky8obdr.gif" alt="Não previsivel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 — O Usuário nunca está totalmente no controle da situação
&lt;/h2&gt;

&lt;p&gt;Todo usuário comum da web passa por isso em algum momento, está lendo um artigo que acabou de abrir e de repente o conteúdo pula na tela, vai mais pra baixo ou mais pra cima por que um elemento como por exemplo, uma imagem foi carregado na tela e tomou seu lugar na árvore de renderização. Isso é ruim. Deixa o usuário fora do controle e o controle da aplicação tem que ser de quem está utilizando-a.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X1LGJFCz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ghjgi0k1uxv98bwa9wx4.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X1LGJFCz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ghjgi0k1uxv98bwa9wx4.gif" alt="Não está no controle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No exemplo acima você vê exatamente a situação que foi relatada, o artigo é aberto e após o usuário começar a mexer é que a imagem é carregada.&lt;/p&gt;

&lt;p&gt;Estes 3 são os principais (não os únicos fatores) que fazem a web ainda ter uma experiência quebrada.&lt;/p&gt;

&lt;p&gt;Estes três problemas aumentam algo que quero que você guarde bem o nome: é a &lt;strong&gt;CARGA COGNITIVA&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O que então &lt;strong&gt;&lt;em&gt;pode ser feito&lt;/em&gt;&lt;/strong&gt; para melhorar a experiência da web no &lt;strong&gt;&lt;em&gt;mobile&lt;/em&gt;&lt;/strong&gt;?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pois bem, no próximo texto iremos explorar 3 princípios que vão de encontro com o que vimos e deixar algumas dicas para que você faça um PWA incrível.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Este texto é uma espécie de transcrição da minha palestra de mesmo título onde explico os princípios gerais de como criar uma experiência incrível nos PWAs, meus agradecimentos à &lt;a href="https://medium.com/@anapbta"&gt;Ana Paula Batista&lt;/a&gt; que me ajudou a revisar alguns dos pontos que serão publicados em breve por aqui.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Encontrou algum erro? Sugestão? Dúvida? Deixe seu comentário que eu responderei assim que puder, corrigirei e levarei sua sugestão em conta.&lt;/p&gt;

</description>
      <category>pwa</category>
      <category>ux</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>#003 Basicão do JS: Várias Variáveis</title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Sat, 15 May 2021 14:09:52 +0000</pubDate>
      <link>https://dev.to/wmitrut/003-basicao-do-js-varias-variaveis-23o3</link>
      <guid>https://dev.to/wmitrut/003-basicao-do-js-varias-variaveis-23o3</guid>
      <description>&lt;p&gt;Hoje vamos falar de Várias Variáveis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ofcby5Jg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eo9gfr0zri1rkxobuchp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ofcby5Jg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eo9gfr0zri1rkxobuchp.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não, esse texto não é sobre o álbum do engenheiros mas poderia ser.&lt;/p&gt;

&lt;p&gt;Eu to é muito feliz com o feedback que vocês tem me dado nestes posts, embora ainda sejam poucos leitores e a maioria amigos eu vou insistir neste projeto pois consigo tirar muita coisa da cabeça e pôr meu blog pra funcionar de uma maneira que eu sempre quis que fosse por aqui.&lt;/p&gt;

&lt;p&gt;Digo isso não só por repercussão mas por que acho que é importante pra mim tanto tentar ensinar quem  ta começando quanto pra reforçar em mim mesmo estes pequenos conceitos de JS e engenharia de software. É básico mas o básico sempre precisa estar sendo lembrado.&lt;/p&gt;

&lt;p&gt;Dito isto, como sempre, coloca o último álbum do Katatonia aí&lt;/p&gt;

&lt;p&gt;&lt;iframe width="100%" height="380px" src="https://open.spotify.com/embed/album/1DX36PVNNEo2o9RAZN6OYJ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Se você não viu os primeiros posts desta série, vai lá e lê, não leva muito tempo não.&lt;/p&gt;

&lt;h3&gt;
  
  
  Variáveis vs. Constantes
&lt;/h3&gt;

&lt;p&gt;Se você prestou atenção no primeiro post da série, vai pegar variáveis com uma certa facilidade. Variáveis são nomes simbólicos que damos a valores de referencia a um espaço na memória no computador.&lt;/p&gt;

&lt;p&gt;Sendo mais claro, é uma palavra ou caractere que damos um valor simbólico. Recebe esse nome por que seu valor pode mudar DURANTE o tempo de execução, já as constantes, como dito pelo próprio nome, se mantém constantemente com o mesmo valor e se você tentar mudar o valor dela, provavelmente terá um erro.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2aVfpBx0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gh245p6th647tcmpw23q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2aVfpBx0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gh245p6th647tcmpw23q.png" alt="Var vs Const"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Os tipos de dados que podem ser atribuídos a uma variável em JS são os mesmos dos quais tratamos nos tipos primitivos com adição dos Arrays que trataremos em um post futuro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como declarar uma variável?
&lt;/h3&gt;

&lt;p&gt;Existem algumas formas que uma variável pode de ser declarada, certas pequenas regras que precisam ser lembradas quando você for criar as suas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Variáveis são case-sensitive&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E o que isso quer dizer? Quer dizer que se você declarar uma variável &lt;code&gt;instrumento&lt;/code&gt; ela vai ser diferente de uma variável &lt;code&gt;Instrumento&lt;/code&gt; ou seja, ela diferencia maiúsculas e minúsculas na sua nomeação, minhaVariável ≠ minhavariavel&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Variáveis aceitam nomes com números&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Desde que se precedida de pelo menos uma letra, é possível criar uma variável &lt;strong&gt;camisa9&lt;/strong&gt; mas não uma &lt;strong&gt;9camisa&lt;/strong&gt; e vamos combinar que pra leitura é bem melhor né&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;É possível utilizar caracteres especiais&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas não é indicado, embora os caracteres diferentes do tipo UTF-8 (esses que você tá acostumado a ver em qualquer texto) sejam muito bem interpretados por navegadores é meio chato você ter que procurar algo que não é necessariamente acessível ao seu teclado quando se está tratando de variáveis, então nada de usar 💩 como nome de variável ok?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L-Ohcv3M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xfgevbeeo5zhknh8u102.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L-Ohcv3M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xfgevbeeo5zhknh8u102.png" alt="💩.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;É possível utilizar _ e $ para nomear variávels&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Realmente há quem goste de usar esses dois caracteres para simbolizar as variáveis em JS tanto no começo quanto para separar palavras, mas isso vai de gosto e de organização de estilo de código.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mas Mitrut, vi um pessoal falando que pode se declarar uma variável com o prefixo var e você utilizou let nos seus exêmplos... como isso funciona?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ótima pergunta, e é por isso que iremos falar da diferença entre &lt;strong&gt;let e var.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  let vs. var vs. const
&lt;/h3&gt;

&lt;p&gt;Um conceito que é preciso entender antes de se entender o que difere um 'let' dum 'var' e duma 'const ' se chama ESCOPO.&lt;/p&gt;

&lt;p&gt;Escopo é o limite do universo no qual as suas variáveis e funções existem. Existem os escopos &lt;strong&gt;globais, de bloco&lt;/strong&gt;  ou de &lt;strong&gt;função.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vu1MAC51--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zd5z988odq5kt2wv3f5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vu1MAC51--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zd5z988odq5kt2wv3f5w.png" alt="Tabela de escopo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O que isso significa na prática? Bom, quando você cria uma variável &lt;code&gt;let&lt;/code&gt; ao invés de uma &lt;code&gt;var&lt;/code&gt;, a let é limitada ao seu bloco ou função, seu  valor não pode ser acessado fora do bloco de código no que foi criada.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gxkUtjXN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3powezfe88hpnkdhk4ql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gxkUtjXN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3powezfe88hpnkdhk4ql.png" alt="Exemplo de acesso do valor com var"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ou seja: Como você pode ver, ao se usar o console.log para verificar os valores do lado de FORA do bloco do for, foi possível pegar o valor de i. de precoDescontado e de precoFinal, afinal var torna-se escopo global.&lt;/p&gt;

&lt;p&gt;Se fosse com let, seria o seguinte:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uwGS0Kx4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnzda0ip1sb536ucjo89.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uwGS0Kx4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnzda0ip1sb536ucjo89.png" alt="Exemplo de acesso do valor com let"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você pode ver que tivemos &lt;code&gt;❌ ReferenceError: i is not defined&lt;/code&gt;, ou seja, ele não encontrou o valor da variável pois variáveis com let pertencem somente ao universo do bloco que foram criadas, nesse caso, somente ao loop do for.&lt;/p&gt;

&lt;p&gt;E se for const?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2WgI5S-S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1u2fs3yj0utl1cx4kqoo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2WgI5S-S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1u2fs3yj0utl1cx4kqoo.png" alt="Exemplo de erro ao tentar reatribuir o valor de const"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como já falamos antes, const vem de CONSTANT ou seja, seu valor se mantém constante durante o tempo de execução do seu bloco e não pode mudar, logo, acima você pode ver que se tentar haver uma redesignação do valor pré determinado haverá um erro que pode ser detectado pelo seu linter.&lt;/p&gt;

&lt;p&gt;Mas isso também não significa que seu valor não possa ser alterado, quer ver? Recapitule nosso artigo sobre objetos e tudo ficará bem claro:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8CwuDt7A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b8fojxb1geudpib38ndm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8CwuDt7A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b8fojxb1geudpib38ndm.png" alt="Exemplo de mudança de valor com const"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não é difícil, mas tá... agora aqui no fim do post, qual usar e quando? Minha recomendação é sempre usar &lt;code&gt;const&lt;/code&gt; a não ser que você tenha absoluta certeza que o valor precisa ser alterado, ai você &lt;code&gt;let&lt;/code&gt;- o var pode ser deixado de lado por hora a não ser que seja extremamente necessário, visto que seu escopo é muito aberto.&lt;/p&gt;

&lt;p&gt;E é isso pessoal, em breve virá mais um post pra vocês, onde vamos falar sobre matemática e operadores.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Links e Fontes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;▶ 🔗 &lt;a href="https://developer.mozilla.org/pt-PT/docs/Web/JavaScript/Guia/Valores,_Vari%C3%A1veis_e_Literais"&gt;Boa e Velha MDN&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▶ 🔗 &lt;a href="https://tylermcginnis.com/var-let-const/"&gt;Tyler McGinnis Blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▶ 🔗 &lt;a href="http://www.constletvar.com/"&gt;CONST-LET-VAR&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▶ 🔗 Acompanhe as lives do &lt;a href="https://www.twitch.tv/pokemaobr"&gt;POKEMÃO&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;E mais&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;▶ FIQUE EM CASA, COMPRE LOCAL, LAVE A MÃO E USE MÁSCARA.&lt;/p&gt;

&lt;p&gt;▶ Você não é obrigado a ser produtivo neste momento, cuide dos seus&lt;/p&gt;

&lt;p&gt;▶ Leia, e leia muito se possível. Mas também se respeite e descanse.&lt;/p&gt;

&lt;p&gt;▶  Tome vacina. Não existe tratamento precoce, Fora Bolsonaro.&lt;/p&gt;

&lt;p&gt;▶  Não caia em papo de dev coach nóia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/wmitrut"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xddOdy9H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1ziictmcl897ws98mvp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>frontend</category>
    </item>
    <item>
      <title>#002 Basicão do JS: Tipos de dados em Javascript - parte 2: Objects</title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Mon, 25 May 2020 02:50:37 +0000</pubDate>
      <link>https://dev.to/wmitrut/002-basicao-do-js-tipos-de-dados-em-javascript-parte-2-objects-4o7</link>
      <guid>https://dev.to/wmitrut/002-basicao-do-js-tipos-de-dados-em-javascript-parte-2-objects-4o7</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HT-h6OlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/710609472fc1f15f668bab8220296919/d1924/001.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HT-h6OlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/710609472fc1f15f668bab8220296919/d1924/001.jpg" alt="Foto de um fusca amarelo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Photo by Moises Alex -  &lt;a href="https://unsplash.com/@arnok"&gt;@arnok&lt;/a&gt; peguei lá no Unsplash&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Semana passada (ou alguns dias mais) eu falei aqui sobre os primitivos básicos de JS, se você não leu, é essencial que dê uma conferida antes de prosseguir nesse artigo pois lá cobrimos as propriedades essenciais para começar a entender estruturas de dados em JS, você pode acessar clicando no link abaixo.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/wmitrut" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8gIndNh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--81plhc08--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/146411/33f32362-904a-41a1-aedc-1ebae11012b7.jpg" alt="wmitrut image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/wmitrut/001-basicao-do-js-tipos-de-dados-em-javascript-parte-1-primitivos-1ihj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;#001 Basicão do JS: Tipos de dados em Javascript - parte 1: Primitivos&lt;/h2&gt;
      &lt;h3&gt;Wellington Mitrut ・ May 25 '20 ・ 7 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#frontend&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Quero começar este post agradecendo o &lt;a href="https://twitter.com/vyper"&gt;Leonardo Saraiva&lt;/a&gt;, que enviou pull request corrigindo algumas coisas do último texto, se você ver algum erro aqui, faça como ele e manda um PR lá!&lt;/p&gt;

&lt;h3&gt;
  
  
  Objetos
&lt;/h3&gt;

&lt;p&gt;Se você está começando agora e não tem noção alguma do que seja, talvez você olhe e pense: "Bom, objetos são coisas que estão ao nosso redor e inanimadas". De certo modo você está certo, a abstração pro conceito de objeto em programação passa por esse caminho. &lt;/p&gt;

&lt;p&gt;Na sua mão muito provavelmente você está segurando um objeto enquanto lê esse artigo, e o que esse objeto tem? Atributos: Marca, cor, tamanho, memória, versão do sistema e assim por diante.&lt;/p&gt;

&lt;h3&gt;
  
  
  O fusquinha amarelo
&lt;/h3&gt;

&lt;p&gt;Eu sempre gosto de contar uma historinha nos posts e esse não poderia ser diferente, vamos trazer pro mundo real. Até 2016 eu era proprietário de um belo, beberrão, barulhento e confortável fusca amarelo 1975, motor 1500, movido a gasolina - semelhante ao fusca que ilustra o início deste post.&lt;/p&gt;

&lt;p&gt;Tive muitas aventuras com este fusca e também já tive que empurrá-lo (e não foram poucas vezes) abaixo de chuva.&lt;/p&gt;

&lt;p&gt;Pois bem, se você percebeu, o primeiro parágrafo desta sessão descrevia superficialmente o fusca, não seria necessário colocar fotos dele aqui pra entender o conceito mas sou da política de que quanto mais mastigada a explicação, melhor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Objetos em JS
&lt;/h3&gt;

&lt;p&gt;Em outras palavras, o fusca(e qualquer outro carro) pode ser abstraído como um OBJETO. Não só do ponto de vista físico mas do ponto de vista de programação, quer ver?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--veKI0UeN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/16418018d9b6a5a1d4ed4b030707ee1b/d095c/002.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--veKI0UeN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/16418018d9b6a5a1d4ed4b030707ee1b/d095c/002.png" alt="Objeto fusca"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Só que no nosso caso, ao invés de atributos físicos, temos atributos como os primitivos que citamos no artigo anterior: strings, booleans e numbers. Isto posto, podemos dizer que um objeto é uma &lt;em&gt;coleção&lt;/em&gt; de valores. Uma notação de chave (key) e valor (value).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0IclVNWy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/6fd7449d15e14d87a55aed2fcf18ac9d/3d4da/003.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0IclVNWy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/6fd7449d15e14d87a55aed2fcf18ac9d/3d4da/003.png" alt="Chave e Valor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simples né? Então tendo um objeto &lt;em&gt;carro&lt;/em&gt; eu consigo acessar seus valores como abaixo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XC_6_mx6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/9ff676ffeffb711f12752e0f366877d6/5d35e/004.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XC_6_mx6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/9ff676ffeffb711f12752e0f366877d6/5d35e/004.png" alt="004.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Notações
&lt;/h3&gt;

&lt;p&gt;"Então, quer dizer que se eu usar . e [ ] chamando a propriedade é a mesma coisa?"&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sim. Mas nem sempre.&lt;/em&gt; Se acostume que essa é a máxima de JS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---bTkUTO7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/8ddb99583775809fb760caff93581d89/fa2eb/005.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---bTkUTO7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/8ddb99583775809fb760caff93581d89/fa2eb/005.png" alt="Notação com atributos de objetos.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na linha 7, o valor vai voltar undefined por que não existe ´chave´ em ´carro´ e na linha 8, estamos atribuindo o valor de chave à interpolação quando chamamos o objeto carro, sendo o valor de chave ´cor´, então o JS vai procurar um atributo ´cor´ dentro do objeto ´carro´ - retornando assim o valor AMARELO.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manipulando objetos
&lt;/h3&gt;

&lt;p&gt;Como você pode notar, é fácil demais acessar dados em JS, dessa forma podemos ler e brincar um pouco com as propriedades que existem&lt;/p&gt;

&lt;p&gt;Vamos pegar o nosso fusquinha acima e descobrir os métodos do Javascript.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com o método entries, ao passar nosso objeto, ele irá retornar um array com todos o dados, ou seja, você pode fragmentar seu objeto em vários pequenos objetos que possuem a chave e o valor do objeto original separados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g-GFPNRz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/845d07a6d3fb3bcf7368e155c811e52f/fa2eb/006.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g-GFPNRz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/845d07a6d3fb3bcf7368e155c811e52f/fa2eb/006.png" alt="Método Entries"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com o Keys, você pega justamente as CHAVES do objeto, ou seja, os atributos que compõem nosso objeto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Mu16nfK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/99ca5af221090a8e2cba38bd375dde36/fa2eb/007.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Mu16nfK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/99ca5af221090a8e2cba38bd375dde36/fa2eb/007.png" alt="Método Keys"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Values, por sua vez retornará os VALORES atribuídos a estas chaves anteriormente citadas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wRjhjRSv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/88eb3e7262cb0c7b0f612e8eb4a473e8/fa2eb/008.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wRjhjRSv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/88eb3e7262cb0c7b0f612e8eb4a473e8/fa2eb/008.png" alt="Método Values"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com o método delete é possível se deletar o valor de um objeto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nqZ9icbk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/4a947a1f68f8182ed41e021d084d2ca9/fa2eb/009.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nqZ9icbk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/4a947a1f68f8182ed41e021d084d2ca9/fa2eb/009.png" alt="Método Delete"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assign&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se com delete eu posso deletar atributos, com assign eu consigo adicionar novos atributos:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MX22tRqU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/59085ffb815ca218f7c770cdefee642f/fa2eb/010.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MX22tRqU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/59085ffb815ca218f7c770cdefee642f/fa2eb/010.png" alt="Método Assign"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sim, eu vendi o fusca - sdds.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Arrays e Objetos
&lt;/h3&gt;

&lt;p&gt;Arrays merecem um (ou mais) posts exclusivos para eles e é um dos assuntos que mais estou ansioso para falar aqui. Acompanhe os posts, compartilhe e chame os amigos pra participar. Para o próximo post da série estou planejando falar sobre VARIÁVEIS.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Links&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Não por menos, abaixo seguem alguns links, como sempre:&lt;/p&gt;

&lt;p&gt;▶ 🔗 O meu amigo &lt;a href="https://twitter.com/Willian_justen"&gt;Willian Justen&lt;/a&gt; ta fazendo uma série de vídeos sobre &lt;a href="https://www.youtube.com/watch?v=mRixno_uE2o&amp;amp;list=PLlAbYrWSYTiPanrzauGa7vMuve7_vnXG_"&gt;Typescript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▶ 🔗 Se você é da região de Curitiba ou São Paulo e tá desempregado, a galera do Boticário ta contratando devs:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--o6hHuu3J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1177556180387995648/YgRxs1Vg_normal.jpg" alt="Senhora Capivara profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Senhora Capivara
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @capiconf
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Vagas citadas pelo &lt;a href="https://twitter.com/fabiorogeriosj"&gt;@fabiorogeriosj&lt;/a&gt; para SP e Curitiba:&lt;br&gt;&lt;br&gt;👉Front End Developer &lt;a href="https://t.co/Ta7Hx3mKrW"&gt;bit.ly/3efKHxV&lt;/a&gt;&lt;br&gt;👉Back End Developer &lt;a href="https://t.co/kIa9O5YMZy"&gt;bit.ly/3g73ZHu&lt;/a&gt;&lt;br&gt;👉Back End Developer Sr. (Integração)&lt;a href="https://t.co/B4RzIT84Ju"&gt;bit.ly/2LMsEmF&lt;/a&gt;&lt;br&gt;&lt;br&gt;Por favor compartilhe com RT para q essas vagas cheguem a mais pessoas
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      17:46 PM - 20 May 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1263164088634523649" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1263164088634523649" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1263164088634523649" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;





&lt;p&gt;▶ 🔗Acompanhe as lives do &lt;a href="https://www.twitch.tv/pokemaobr"&gt;POKEMÃO&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;E mais&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;▶ FIQUE EM CASA, COMPRE LOCAL, LAVE A MÃO E USE MÁSCARA.&lt;/p&gt;

&lt;p&gt;▶ Você não é obrigado a ser produtivo neste momento, cuide dos seus&lt;/p&gt;

&lt;p&gt;▶ Leia, e leia muito se possível. Mas também se respeite e descanse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/wmitrut"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QBpn-j6G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/fc44dd8bd18c6b8a4170bff71ee059ac/fa2eb/twitchbanner.png" alt="Me siga na twitch"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>frontend</category>
    </item>
    <item>
      <title>#001 Basicão do JS: Tipos de dados em Javascript - parte 1: Primitivos</title>
      <dc:creator>Wellington Mitrut</dc:creator>
      <pubDate>Mon, 25 May 2020 02:27:53 +0000</pubDate>
      <link>https://dev.to/wmitrut/001-basicao-do-js-tipos-de-dados-em-javascript-parte-1-primitivos-1ihj</link>
      <guid>https://dev.to/wmitrut/001-basicao-do-js-tipos-de-dados-em-javascript-parte-1-primitivos-1ihj</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JJZEMZzj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/c995e765fb2ec7461fa1d140faa858d9/d1924/001.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JJZEMZzj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/c995e765fb2ec7461fa1d140faa858d9/d1924/001.jpeg" alt="Foto de dados de RPG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;É de tipos de dados mas não é necessariamente ESSE tipo de dados que vamos falar hoje - Acervo Pessoal&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Fala galera, decidi utilizar a quarentena (e o desemprego) pra criar alguns conteúdos - a começar por JS mais purão básico, pra você que nunca teve contato com programação e/ou  ta iniciando na faculdade, pra quem ta aí batendo cabeça pra entender como tudo funciona e até alguns conteúdos mais 'divertidos' pra quem já entende um pouco. &lt;/p&gt;

&lt;p&gt;Esse tempo de quarentena me fez relembrar um pouco de como foi meu começo e de como as coisas não eram claras por algum motivo - eu não era um mal aluno, tirava boas notas na faculdade, mas não necessariamente estava aprendendo no começo.&lt;/p&gt;

&lt;p&gt;Eu vou tentar criar e abstrair estes conceitos da mesma maneira que eu gostaria que tivesse sido ensinado pra mim lá nos idos de 2011 quando iniciei a faculdade e meu entendimento de programação era talvez até menor que o seu.&lt;/p&gt;

&lt;p&gt;Eu não sei quanto tempo isso vai levar pra acabar, nem quantos posts eu vou escrever pra englobar tudo que imagino ser o 'básico'. Se você estiver procurando algo mais avançado ou quer dar um mergulho mais profundo sem me esperar, eu indico o curso &lt;a href="https://www.udemy.com/course/curso-javascript-ninja/"&gt;JAVASCRIPT NINJA&lt;/a&gt; do &lt;a href="https://twitter.com/fdaciuk"&gt;Fernando Daciuk&lt;/a&gt; e o livro &lt;a href="https://www.amazon.com/Estruturas-Dados-Algoritmos-Com-Javascript/dp/8575226932"&gt;Estruturas De Dados E Algoritmos Com Javascript&lt;/a&gt; da &lt;a href="https://twitter.com/loiane"&gt;Loiane.&lt;/a&gt; Ambos são excelentes profissionais e amigos que tenho profundo respeito - os conteúdos deles já estão mais que revisados e consolidados, então pode adquiri-los sem medo.&lt;/p&gt;

&lt;p&gt;A ideia principal da série é criar um conteúdo fácil e de linguagem acessível a qualquer um que tenha um navegador e que possa ler este conteúdo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Um pouco de história
&lt;/h2&gt;

&lt;p&gt;O Javascript, embora tenha mais idade que alguns leitores, é uma linguagem de programação relativamente jovem, lá em 1994 muita coisa acontecia - Kurt Cobain morria, o Brasil conquistava o tetra, Mandela era eleito, Tom Hanks ganhava Oscar com Forrest Gump e o Brendan Eich criava o JS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r1VTsPo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/3a05e6952e1a76cf62b4f018efd4520e/fa2eb/002.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r1VTsPo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/3a05e6952e1a76cf62b4f018efd4520e/fa2eb/002.png" alt="Dunga levantando a taça do Tetra de 1994"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Photo by FIFA&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;É impraticável pensar a internet de hoje sem o JS, muita gente pode tentar reproduzir com outras linguagens, mas a base de tudo é o JS. A internet, o conceito de site, de aplicações, tudo isso veio antes, mas o MUNDO como conhecemos hoje seria consideravelmente diferente sem o JS.&lt;/p&gt;

&lt;p&gt;O javascript é uma linguagem multiparadigma, ou seja, existem muitas formas distintas de se trabalhar com ela: orientada a eventos, imperativa, funcional e o diabo a 4 - mas isto é algo que podemos tratar num post (ou mais) futuro.&lt;/p&gt;

&lt;p&gt;Como toda linguagem de programação, o Javascript tem seus tipos de dados que pode ser divididos em dois 'grupos', Objects e os chamados de PRIMITIVES - só que pra entende-los antes vamos entender como funciona a tipagem em JS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipagem dinâmica
&lt;/h2&gt;

&lt;p&gt;Tipagem é o ato de você atribuir a um elemento abstrato um formato de dados. Se dizemos que numa equação x = 1, logo, x é um elemento do tipo &lt;em&gt;número.&lt;/em&gt; Entende onde quero chegar? Ainda não se trata de JS, mas entender este conceito é essencial.&lt;/p&gt;

&lt;p&gt;O JS permite você atribuir diversos tipos de valor a uma variável sem que isso seja fixado, uma variável pode em um momento ser do &lt;em&gt;tipo a&lt;/em&gt; e logo depois posso atribuir um &lt;em&gt;tipo b&lt;/em&gt;  a ela. Isso pode ser bom como pode ser ruim. Vejamos abaixo como isso funciona:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GPQlfzUc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/52a89480ad14a4160f30840a377fa936/fa2eb/003.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GPQlfzUc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/52a89480ad14a4160f30840a377fa936/fa2eb/003.png" alt="Exemplo de tipagem dinâmica"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Exemplo de tipagem dinâmica&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa tipagem dinâmica pode parecer um tanto confusa e algumas pessoas realmente não gostam, criam coisas como o Typescript e o Flow mas com o tempo você irá se acostumar e entender um pouco mais. Existem momentos em que ambas as abordagens podem ser úteis e tem seus fãs e detratores, mas no final é tudo JS.&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;Toda vez que você diz que Typescript é uma linguagem, um panda morre.... Não mate os pandas =/ &lt;a href="https://t.co/5veqRfkUU6"&gt;pic.twitter.com/5veqRfkUU6&lt;/a&gt;&lt;/p&gt;— Willian Justen (@Willian_justen) &lt;a href="https://twitter.com/Willian_justen/status/1259929107032399872?ref_src=twsrc%5Etfw"&gt;May 11, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;p&gt;Isto posto, vemos novos nomes ali, Number, Boolean e String. Estes são os tipos primitivos do JS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primitives
&lt;/h2&gt;

&lt;p&gt;No exemplo abaixo temos os principais tipos em JS e uma atribuição de exemplo pra cada:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CQpDvRP5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/cbff295106a4288a8441ce6816088b91/79f20/004.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CQpDvRP5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/cbff295106a4288a8441ce6816088b91/79f20/004.png" alt="Primitives em JS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Primitives em JS&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para um melhor entendimento decidi elencar do mais simples até o mais complexo de explicar, então vamos lá:&lt;/p&gt;

&lt;h3&gt;
  
  
  Boolean
&lt;/h3&gt;

&lt;p&gt;Se você já teve alguma noção básica de computação sabe que computadores trabalham lá em sua camada mais simples com 0 e 1, é o sistema binário. Basicamente no sistema binário 1 quer dizer LIGADO e 0 quer dizer DESLIGADO - imagine uma lâmpada, um único LED, ele tem apenas 2 estados: ligado e desligado. A combinação de bits ativos e inativos que gera os cálculos complexos e a computação civil como um todo. &lt;/p&gt;

&lt;p&gt;Agora que você entendeu este conceito, no javascript  podemos trazer esse mesmo sistema lógico para os dados de tipo boolean, algo é (TRUE) ou não é (FALSE).&lt;/p&gt;

&lt;p&gt;Deste modo, no nosso exemplo acima, eu digo para minha variável isMusicPlaying que ela é TRUE, que é verdadeira, que sim - há música tocando.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KNPHAGLn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/127ffdd700dd7b90a30d07021c52f74a/9834d/005.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KNPHAGLn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/127ffdd700dd7b90a30d07021c52f74a/9834d/005.png" alt="Exemplo de Boolean"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Exemplo de Boolean&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Um exemplo de uso? Imagine que justamente criamos um player de música tal qual o Spotify e queremos saber se uma música está sendo tocada, no caso, implementamos toda uma estrutura que irá no final resultar em atribuir a isMusicPlaying o valor true ou false para assim fazermos outras funções e implementações do nosso player.&lt;/p&gt;

&lt;h3&gt;
  
  
  Number
&lt;/h3&gt;

&lt;p&gt;Number é justamente um número. &lt;/p&gt;

&lt;p&gt;Eu sei o que você pensou:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Nossa, gênio, como eu não havia pensado nisso, alguém dá um desses prêmio fancy pro rei da programação aqui!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mas calma lá, diferente de algumas linguagens de programação, JS não precisa de um tipo específico para inteiros, todo número é um number. Todo número inteiro, negativo, positivo, de ponto flutuante (os lembra dos números racionais? Achou que nunca ia utiliza-los né).&lt;/p&gt;

&lt;p&gt;Então desde -0.243423415 ao 3 estão compreendidos neste tipo.&lt;/p&gt;

&lt;p&gt;PORÉM, uma coisa importante é que as vezes o JS é meio doido e pode ter seus problemas. E é aqui que eu apresento a vocês um &lt;a href="https://0.30000000000000004.com/#javascript"&gt;problema clássico do tipo number&lt;/a&gt; em JS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YgD_sdJP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/80d47dad8a693283411a2b93767b4268/fa2eb/006.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YgD_sdJP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/80d47dad8a693283411a2b93767b4268/fa2eb/006.png" alt="Exemplo de Number"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Exemplo de Number&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;0.1 + 0.2 = 0.3&lt;/strong&gt;  - &lt;em&gt;mas nem sempre.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pra isso a gente tem que usar artifícios como o método toFixed() e o toPrecision() e isso serve para outros casos também, como arredondar um dado importante -  mas que fique claro, você só vai usar isto pra arredondar se o seu caso for este, se esse for o tipo de precisão que você precisa.&lt;/p&gt;

&lt;h3&gt;
  
  
  String
&lt;/h3&gt;

&lt;p&gt;A maneira mais simples mas não a mais correta de explicar o do que uma &lt;em&gt;String&lt;/em&gt; se trata é esta: &lt;strong&gt;é um texto.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agora, se quisermos realmente nos aprofundar, o conceito pode ser melhor definido como uma sequência de caracteres. Você pode representar uma string com aspas simples ('') ou com aspas duplas("").&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cExANSzx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/bc6a603f1ba2fe536d1ae8f52206627d/5eaf4/007.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cExANSzx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/bc6a603f1ba2fe536d1ae8f52206627d/5eaf4/007.png" alt="Exemplo de String"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Exemplo de String&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;É possível 'navegar' em uma string utilizando programação. Por exemplo, eu posso recuperar o valor de um caracter com base no índice que ele ocupa nela. Eu consigo, via linguagem de programação saber qual é a posição (índice) de uma letra dentro da string, sabendo que os índices em JS começam com 0, na nossa variável bandName, o valor do índice 2 é &lt;em&gt;s&lt;/em&gt; e assim por diante.&lt;/p&gt;

&lt;p&gt;Diferente de linguagens como C, strings em JS são imutáveis. Isto significa que: uma vez criada a string, não é possível modificá-la. Entretanto, ainda é possível criar outra string baseada em um operador na string original. Por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uma substring da original a partir de letras individuais ou usando &lt;code&gt;String.substr()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Uma concatenação de duas strings usando o operador (&lt;code&gt;+&lt;/code&gt;) ou &lt;code&gt;String.concat()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Undefined
&lt;/h3&gt;

&lt;p&gt;Undefined é algo que não teve seu valor definido, algo sem um valor, &lt;strong&gt;não é nulo,&lt;/strong&gt; não confunda. O undefined existe mas ainda não teve seu valor definido. &lt;/p&gt;

&lt;h3&gt;
  
  
  Null
&lt;/h3&gt;

&lt;p&gt;Nulo por sua vez é um valor inexistente. Em ciência da computação, um valor nulo representa uma referência que aponta, geralmente de maneira intencional, para um objeto ou endereço de memória inválido ou inexistente. O significado do valor nulo varia entre as implementações das linguagens.&lt;/p&gt;

&lt;p&gt;Imagine sua aplicação como se fosse uma caixa, enquanto undefined é algo que ainda não recebeu um valor mas está la dentro,  já o nulo não existe nesse universo da casa.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Dl5slCiJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/70aa45feba2e45ae66717fd87fd9fe1c/bc3d3/008.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dl5slCiJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/70aa45feba2e45ae66717fd87fd9fe1c/bc3d3/008.png" alt="Homem Formiga"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Homem Formiga&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se as primitivas fossem Vingadores, null seria o Homem-Formiga quando ficou no reino quântico. Ele é um valor que sabemos que está em algum lugar mas também sabemos que ele não existe naquele universo da Guerra Infinita.&lt;/p&gt;

&lt;h3&gt;
  
  
  Symbols
&lt;/h3&gt;

&lt;p&gt;Símbolos são relativamente novos em JS e confesso serem um tanto mais complexos de explicar que os anteriores. Mas é um tipo também imutável. Na maioria das vezes é possível utilizar-se uma string ou um number no lugar do Symbol, com a diferença que se precisarmos definir um valor globalmente.  Futuramente quando abordarmos funções e objetos isto ficará mais claro.&lt;/p&gt;

&lt;p&gt;Com isto posto, finalizamos este primeiro post sobre o Basicão do Javascript, semana que vem iremos abordar OBJECTS.&lt;/p&gt;

&lt;p&gt;Não por menos, abaixo seguem alguns links, como sempre:&lt;/p&gt;

&lt;p&gt;▶ 🔗 O meu amigo &lt;a href="https://twitter.com/Willian_justen"&gt;Willian Justen&lt;/a&gt; ta fazendo uma série de vídeos sobre &lt;a href="https://www.youtube.com/watch?v=mRixno_uE2o&amp;amp;list=PLlAbYrWSYTiPanrzauGa7vMuve7_vnXG_"&gt;Typescript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▶ 🔗 Se você é da região de Curitiba ou São Paulo e tá desempregado, a galera do Boticário ta contratando devs&lt;/p&gt;




&lt;p&gt;▶ 🔗Acompanhe as lives do &lt;a href="https://www.twitch.tv/pokemaobr"&gt;POKEMÃO&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;E mais&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;▶ FIQUE EM CASA, COMPRE LOCAL, LAVE A MÃO E USE MÁSCARA.&lt;/p&gt;

&lt;p&gt;▶ Você não é obrigado a ser produtivo neste momento, cuide dos seus&lt;/p&gt;

&lt;p&gt;▶ Leia, e leia muito se possível. Mas também se respeite e descanse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/wmitrut"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QBpn-j6G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.wmitrut.com/static/fc44dd8bd18c6b8a4170bff71ee059ac/fa2eb/twitchbanner.png" alt="Me sigaa na twitch"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
