Soit vs const - quoi utiliser?

Bonjour, Habr! Je vous présente la traduction de l'article «On let vs const» de Dan Abramov .

Mon post précédent contient ce paragraphe:

let vs const vs var : Normalement, tout ce dont vous avez besoin est let . Si vous devez empêcher la réécriture d'une variable, vous pouvez utiliser const . (Certains sont très pédants à ce sujet et préfèrent utiliser const lorsqu'il n'y a qu'une seule affectation de variable).

Cette déclaration s'est avérée très controversée, sur Twitter'e et Reddit'e ont immédiatement entamé des discussions animées à ce sujet. Il semble que l'opinion la plus populaire (ou au moins exprimée verbalement par la majorité) soit que vous devez toujours utiliser const et ne vous référer à let que si nécessaire, ce qui peut être fourni par la règle prefer-const d'ESLint.

Dans cet article, je vais brièvement énumérer tous les avantages et les inconvénients que j'ai rencontrés et exprimer mon opinion personnelle à ce sujet.

Pourquoi préférez const


  • Une règle claire: c'est une charge supplémentaire pour le cerveau lorsque vous devez penser à chaque fois s'il faut utiliser const ou let, c'est mieux. La règle «Toujours utiliser const là où cela fonctionne» vous libère des tracas inutiles et laisse cette tâche au linter.
  • Les réaffectations peuvent provoquer des bogues: dans les grandes fonctions, il arrive que vous ne remarquiez pas si une variable est réaffectée, ce qui peut être la cause de bogues. Surtout dans les fermetures. Const vous donne l'assurance que vous verrez toujours la même valeur.
  • Comprendre la mutation: ceux qui commencent tout juste à apprendre JavaScript peuvent mal comprendre le principe de const , pensant qu'il empêche la mutation d'une variable. Il est important de comprendre la différence entre la mutation d'une variable et sa réaffectation. L'utilisation de const vous oblige à comprendre et à confronter cette distinction dès le début.
  • Réaffectations sans signification: Parfois, la réaffectation d'une variable n'a aucun sens. Par exemple, dans React Hooks, les valeurs que vous obtenez à partir du hook - comme useState - sont plus comme des paramètres. Ils vont dans le même sens. En voyant une erreur dans leur affectation, vous en apprendrez plus tôt sur le flux de données React.
  • Avantages de l'exécution: Il existe également de rares affirmations selon lesquelles le moteur JavaScript peut exécuter du code plus rapidement lorsque const est utilisé, car il sait qu'une variable ne peut pas être écrasée.

Pourquoi ne préférez-vous pas const


  • Const perd son sens: si nous utilisons const partout, nous perdrons la capacité de comprendre s'il était important que quelque chose n'ait pas été réaffecté.
  • L'embarras avec l'immunité: dans chaque discussion où ils disent que vous devriez toujours utiliser const , il y a ceux qui sont confus sur la question de l'immunité. Cela n'est pas surprenant car les deux opérations (déclaration et réaffectation) utilisent le même opérateur "=". En réponse à cela, ils disent généralement que vous avez juste besoin "d'apprendre la langue". Cependant, les contre-arguments sont tels que si la méthode, qui est d'empêcher les erreurs des débutants, confond ces mêmes débutants, alors ce n'est pas si utile. Et, malheureusement, cela ne permet pas d'éviter les erreurs de mutation qui s'étendent aux modules et affectent tout.
  • Pression pour éviter la surdéclaration: les partisans de la méthode "const-first" forcent les développeurs à ne pas utiliser les variables let in déclarées dans la condition. Par exemple, vous pouvez écrire
    const a = cond ? b : c 
    au lieu de conditions si , même si les branches b et c (objets) sont complexes et leur donner des noms détaillés est difficile.
  • La réaffectation ne peut pas être la cause de bogues: il y a trois composants principaux lorsque la réaffectation peut être la cause de bogues: la portée est trop grande (en tant que fonction modulaire ou grande), lorsque la valeur est un paramètre (car on ne s'attend pas à ce que ce soit égal à autre chose de ce qui a été passé), et lorsque la variable est utilisée dans une fonction imbriquée. Cependant, dans de nombreuses situations, la plupart des variables ne correspondent à aucun de ces cas et les paramètres ne peuvent pas du tout être désignés comme constantes.
  • Il n'y a aucun avantage en termes de performances: je pense que le moteur est déjà averti - quelles variables sont déclarées une fois, même si vous utilisez var ou let . Si nous continuons à affirmer que const rend le code plus productif, nous pouvons tout aussi bien affirmer que des vérifications supplémentaires peuvent augmenter le temps d'exécution plutôt que le diminuer. Sérieusement, les moteurs sont plus intelligents.

Mon avis


Je m'en fiche.

Je peux utiliser n'importe quelle règle que les autres utilisent.

Si vous vous en souciez, utilisez le linter, qui automatise la vérification et la correction, en changeant let en const , afin qu'il ne perde pas votre temps lors de la prochaine révision du code.

Enfin, n'oubliez pas que les linters sont conçus pour faciliter le développement. Si une règle vous dérange, vous ou votre équipe, supprimez-la. Ce sera le meilleur. Apprenez de vos erreurs.

Lien vers l'article d'origine - On let vs const .

Source: https://habr.com/ru/post/fr482892/


All Articles