Desenvolvimento JavaScript

As diferenças de var, let e const

12 de março de 2019

As diferenças de var, let e const

Neste artigo veremos quais são as diferenças nestas três formas de declarar valores, e também casos de uso para var, let e const.

Antigamente tinhamos apenas uma forma de declarar variáveis, e hoje ainda é a mais conhecida, a famosa: var

Porém com a vinda do ES6 temos novas possibilidades, alguns de vocês já devem ter ouvido falado, e os nomes das crianças  são let e const

O que é let?

Como já sabemos é uma forma de definir uma variável, porém a grande diferença para var é que podemos limitar o escopo para um bloco

Diferente do var que é definido globalmente no escopo de funções apenas, let pode ter um valor diferente dentro de cada bloco

Entenda bloco por tudo que está entre { }

Talvez no começo pareça confuso, mas vamos a alguns exemplos, primeiramente com var:

// exemplos var
var nome = 'João';

console.log('Meu nome é: ', nome); // Meu nome é:  João

function sayMyName() {
    var nome = 'Pedro';
    console.log('Meu nome é :', nome); // Meu nome é : Pedro
}

sayMyName();

console.log(nome); // João

Bom, aqui deve ser óbvio para você, mas como explicado anteriormente o escopo de var é limitado por um bloco de função

Ou seja, criando uma variável com exatamente o mesmo nome dentro de uma função e atribuindo ela para um valor diferente da declarada no escopo global da aplicação, não altera no valor da primeira

Assim sendo o limite de uma variável é o bloco de uma função, então vamos ver um outro caso:

if(true) {
    var nome = 'Kléber';
    console.log('Meu nome é: ', nome); // Meu nome é:  Kléber
}

console.log('Meu nome é: ', nome); // Meu nome é:  Kléber

for(i = 0; i < 3; i++) {
    var nome = 'Vitor';
    console.log('Meu nome é: ', nome ); // Meu nome é:  Vitor
}

console.log('Meu nome é: ', nome ); // Meu nome é:  Vitor

Agora de forma diferente adicionamos elementos como if e um for, que não são funções, a variável nome é alterada por todos eles

Entenda que funções, no JavaScript, são elementos de bloco que tem um escopo separado do fluxo da aplicação

if, for, while e etc, são elementos de bloco porém compartilham o mesmo escopo, explicando assim porque a variável nome é alterada

Então agora vamos ver caso a caso com let:

let meuNome = 'João';

console.log('Meu nome é: ', meuNome); // Meu nome é:  João

function sayMyName() {
    let meuNome = 'Pedro';
    console.log('Meu nome é :', meuNome); // Meu nome é : Pedro
}

sayMyName();

console.log(meuNome); // João

Nessa parte fica exatamente igual a var, por que a função é um elemento de bloco

Então let mantem os valores para cada bloco

Agora veja o próximo:

if(true) {
    let meuNome = 'Kléber';
    console.log('Meu nome é: ', meuNome); // Meu nome é:  Kléber
}

console.log('Meu nome é: ', meuNome); // Meu nome é:  João

for(i = 0; i < 3; i++) {
    let meuNome = 'Vitor';
    console.log('Meu nome é: ', meuNome ); // Meu nome é:  Vitor
}

console.log('Meu nome é: ', meuNome ); // Meu nome é:  João

Dentro dos blocos if e for a variável meuNome é alterada, porém perceba que fora dela o valor é o mesmo do início do do primeiro exemplo

Aqui vemos a real diferença de let, que separa cada valor de variável por elementos de bloco, ou seja, tudo que estiver entre { }

E por fim podemos declarar let dentro de um loop sem também interferir no contexto global, veja:

let j = 0;

for(let j = 10; j > 0; j--) {
    console.log('j agora é :' + j);
}

O primeiro j não tem nada a ver com o segundo, que foi criado como contador de índice, para auxiliar o fim do for

O que é const?

Quando declaramos um valor com const ele não pode ser alterado ao longo do código, 

Outras linguagens que você já utilizou provavelmente tinham como declarar uma constante, e a do JavaScript tem o conceito igual a estas outras, o valor é imutável

Além disso o nome é único, ou seja, pode ser declarado apenas uma vez uma, caso você declare algo com o mesmo nome receberá um erro

Uncaught SyntaxError: Identifier 'teste' has already been declared

Outra particularidade das constantes é que devem ser iniciadas com algum valor, se não, novamente recebemos um erro (por motivos óbvios :D), que é o seguinte:

Uncaught SyntaxError: Missing initializer in const declaration

Sabendo agora a forma correta de declarar, vamos ver outras particularidades

Elas se comportam semelhante ao let, trabalhando dentro do bloco declarado, ou seja, entre { } não afetarão as outras fora do bloco, veja:

const teste = 1;

if(true) {
    const teste = 2;
    console.log(teste); // 2
}

console.log(teste); // 1

Então entendendo como let funciona, você também sabe como funciona o const

A grande diferença é que seu valor não pode ser alterado! 🙂

Nunca mais vou usar var na vida?

Vou citar aqui alguns argumentos para não utilizar var em códigos que utilizem o ES6, veja:

  • Nenhum erro é retornado se você declara uma variável com o mesmo nome, com let e const você recebe um erro;
  • var não tem escopo de bloco, ou seja, em códigos maiores é difícil de manter;
  • Não vi caso algum que var seja extremamente necessário, sempre podemos trocar para let ou const;

Então agora fica a seu critério! 😀

Repositório

Você pode encontrar todo o código utilizado aqui!

Conclusão

Vimos que no ES6 temos duas maneiras de declarar valores

Primeiramente let, que é o mais próximo do antigo var porém com algumas diferenças como: escopo de bloco, só podemos declarar uma única vez com o mesmo nome (no mesmo escopo), o que deixa o código mais fácil de manter e organizado

E depois const, que são as conhecidas constantes das outras linguagens, que mantém o valor para sempre no seu escopo, e herda o mesmo que escopo de let, ou seja, de bloco

E esta última devemos sempre declarar com algum valor inicial e seu nome deve ser único!

Confira também o nosso canal do Youtube com muito conteúdo sobre programação, clicando aqui.

Obrigado por lerem pessoal, até o próximo post. 🙂

0

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Deixe um comentário

avatar
  Subscribe  
Notify of