Olá Habr! Apresento a você a tradução do artigo
“On let vs const” de
Dan Abramov .
Minha
postagem anterior contém este parágrafo:
let vs const vs var : Normalmente, tudo o que você precisa é deixar . Se você precisar impedir a reescrita de uma variável, poderá usar const . (Alguns são muito pedantes sobre isso e preferem usar const quando há apenas uma atribuição de variável).
Essa declaração acabou sendo muito controversa, no Twitter'e e no Reddit'e imediatamente começaram discussões acaloradas sobre isso. Parece que a opinião mais popular (ou pelo menos verbalmente expressa pela maioria) é que você deve sempre usar
const e referir-se a
deixar apenas se necessário, o que pode ser fornecido pela regra
prefer-const da ESLint.
Neste post, listarei brevemente todos os prós e contras que conheci e expressarei minha opinião pessoal sobre esse assunto.
Por que preferir const
- Uma regra clara: essa é uma carga extra para o cérebro quando você precisa pensar cada vez que usar const ou let é melhor. A regra “Sempre use const onde ele funciona” evita problemas desnecessários e deixa essa tarefa para o linter.
- As redesignações podem causar erros: em funções grandes, acontece que você pode não perceber se uma variável é redesignada e isso pode ser a causa dos erros. Especialmente em fechamentos. Const lhe dá a garantia de que você sempre verá o mesmo valor.
- Entendendo a mutação: aqueles que estão começando a aprender JavaScript podem entender mal o princípio da const , pensando que ela impede a mutação de uma variável. É importante entender a diferença entre a mutação de uma variável e sua reatribuição. Usando const obriga você a entender e enfrentar essa distinção desde o início.
- Reatribuições sem sentido: Às vezes, reatribuir uma variável não faz sentido. Por exemplo, em React Hooks, os valores que você obtém do gancho - como useState - são mais parecidos com parâmetros. Eles estão indo na mesma direção. Vendo um erro em sua atribuição, você aprenderá mais cedo sobre o fluxo de dados do React.
- Vantagens da execução: também há afirmações raras de que o mecanismo JavaScript pode executar o código mais rapidamente onde const é usado, pois sabe que uma variável não pode ser substituída.
Por que não prefere const
- Const perde seu significado: se usarmos const em todos os lugares, perderemos a capacidade de entender se era importante que algo não fosse reatribuído.
- O constrangimento com a imunidade: em todas as discussões em que eles dizem que você deve sempre usar const , há quem fique confuso sobre a questão da imunidade. Isso não é surpreendente, pois as duas operações (declaração e reatribuição) usam o mesmo operador "=". Em resposta a isso, eles costumam dizer que você só precisa "aprender o idioma". No entanto, os contra-argumentos são tais que, se o método, que é evitar os erros dos iniciantes, confunde esses mesmos iniciantes, isso não é tão útil. E, infelizmente, isso não ajuda a evitar erros de mutação que se estendem aos módulos e afetam tudo.
- Pressão para evitar excesso de declaração: Os apoiadores do método "const-first" forçam os desenvolvedores a não usar variáveis let in declaradas na condição. Por exemplo, você pode escrever
const a = cond ? b : c
em vez de se condições, mesmo se os ramos b e c (objetos) forem complexos e for difícil dar nomes detalhados a eles. - A reatribuição não pode ser a causa de bugs: há três componentes principais em que a reatribuição pode ser a causa de bugs: o escopo é muito grande (como uma função modular ou grande), quando o valor é um parâmetro (pois não é esperado que isso seja igual a qualquer outra coisa) do que foi passado) e quando a variável é usada em uma função aninhada. No entanto, em muitas situações, a maioria das variáveis não corresponde a nenhum desses casos, e os parâmetros não podem ser designados como constantes.
- Não há vantagem de desempenho: é minha opinião que o mecanismo já foi avisado - quais variáveis são declaradas uma vez, mesmo se você usar var ou let . Se continuarmos argumentando que const torna o código mais produtivo, também podemos argumentar que verificações adicionais podem aumentar o tempo de execução do que diminuí-lo. Sério, os motores são mais inteligentes.
Minha opinião
Eu não ligo
Eu posso usar qualquer regra que outras pessoas usem.
Se você se importa, use o linter, que automatiza a verificação e correção, alterando para
const , para que não perca seu tempo na futura revisão de código.
Por fim, lembre-se de que os linters são projetados para facilitar o desenvolvimento. Se alguma regra incomodar você ou sua equipe, remova-a. Será o melhor. Aprenda com seus erros.
Link para o artigo original -
On let vs const .