Multe ghiduri de stil JavaScript sugerează scrierea cu majuscule a numelor constante. Personal, rar văd această convenție folosită acolo unde credeam că ar trebui să fie. Acest lucru se datorează faptului că definiția mea pentru o constantă a fost puțin dezactivată. Am decis să fac un pic de săpat și să mă familiarizez cu această convenție.

Cum definim termenul „constantă”?

În programare, este o constantă care nu se schimbă.

Este o valoare care nu poate fi modificată de program în timpul executării normale.

Deci, JavaScript ne oferă o modalitate de a declara o valoare care nu poate fi modificată? Înainte de a răspunde la aceasta, să ne uităm la rădăcinile acestei convenții.

Convenția de valorificare are rădăcini în C

C este un limbaj compilat. Aceasta înseamnă că un alt program convertește tot codul dvs. în codul mașinii înainte de a rula.

JavaScript, pe de altă parte, este un limbaj interpretat. Un interpret vă citește codul, rând cu rând, pe măsură ce rulează.

Diferența dintre compilare și interpretare joacă un rol în modul în care declarăm valori constante în C.

În C, pot declara o astfel de variabilă:

int hoursInDay = 24;

Sau, o constantă ca aceasta:

#define hoursInDay 24

Al doilea exemplu se numește a constantă simbolică. Constantele simbolice pot fi o secvență de caractere, o constantă numerică sau un șir. Acestea sunt numite și valori primitive. Valorile primitive din JavaScript sunt șiruri, numere, booleeni, nul, nedefinit, simbol (nu trebuie confundat cu constante simbolice) și int mari.

Acum, să revedem compilarea.

Înainte de compilare, există o fază de precompilare. Aici, pre-compilatorul înlocuiește toate instanțele de constante simbolice cu valoarea respectivă. Compilatorul nu știe niciodată că programatorul a scris hoursInDay. Vede doar numărul 24.

Scrierea cu majuscule ajută programatorul să vadă aceste valori cu adevărat constante.

#define HOURS_IN_DAY 24

Constantele JavaScript sunt diferite de constantele simbolice

Înainte de ES6, am stocat cele mai multe valori în variabile, chiar și acele valori pe care ați dorit să rămână constante.

Capitalizarea ne-a ajutat să vedem valorile pe care am vrut să le rămânem constante.

var HOURS_IN_DAY = 24;
var hoursRemaining = currentHour - HOURS_IN_DAY;
var MY_NAME = 'Brandon';
MY_NAME = ... // oops don't want to do this.

ES6 a introdus declarația const care nu este o „constantă” în sensul cel mai pur.

ES6 a adăugat termenii const și let ca modalități de a crea variabile cu intenții diferite.

Cu acești doi termeni, puteți crede că noi:

  1. nu trebuie să valorificăm nimic, deoarece putem vedea clar care variabile sunt destinate să rămână aceleași sau
  2. ar trebui să valorificăm tot ceea ce declarăm const.

Prin definitie, const creează o constantă care este o referință numai în citire la o valoare. Aceasta nu înseamnă că valoarea pe care o deține este imuabilă. Spune doar asta identificatorul variabilei nu poate fi reatribuit.

Cu alte cuvinte, unele const referințele se pot schimba.

const firstPerson = {
  favoriteNumber: 10,
};
const secondPerson = firstPerson;
console.log(secondPerson.favoriteNumber); //10
firstPerson.favoriteNumber +=1;
console.log(secondPerson.favoriteNumber); //11

Exemplul de mai sus arată că declarația const nu se asigură că variabila este imuabilă.

const ne împiedică doar să încercăm să realocăm numele variabilei. Nu împiedică schimbarea proprietății obiectului. Nu uitați: obiectele sunt trecere prin referință.

// "TypeError: Assignment to constant variable."secondPerson = 'something else';
const secondPerson = 'Me'
secondPerson = 'something else';

Deci, pentru JavaScript, trebuie să mergem dincolo de simpla căutare a unui const declaraţie. Trebuie să punem două întrebări pentru a determina dacă o variabilă este o constantă:

  1. Valoarea variabilei este primitivă?
  2. Intenționăm să menținem numele variabilei îndreptat către aceeași valoare pe tot parcursul programului nostru?

Dacă răspunsul este da pentru ambele, ar trebui să declarăm variabila cu const și poate scrie cu majuscule numele.

Observați că am spus „mai”. Spiritul acestei convenții provine din diferite limbi care aveau constante reale. JavaScript nu. Cel puțin în cel mai pur sens. Acesta poate fi motivul pentru care vedeți această convenție mai rar decât v-ați putea aștepta. Airbnb are o secțiune extraordinară în ghidul lor de stil, luând aici.

cheie de luat masa este de a recunoaște definirea unei constante în JavaScript trebuie să includă intențiile programatorului.

În plus, nu fiecare convenție dintr-o limbă are sens într-o altă limbă. În cele din urmă, îmi pot imagina doar că multe convenții au fost folosite cu mult înainte ca IDE să aibă capacitățile pe care le au astăzi. Sunt convins că IDE-ul meu se bucură să-mi spună că mă înșel. Se întâmplă foarte mult.

Mulțumesc pentru lectură!

woz

Urmărește-mă Stare de nervozitate.

Note

  • S-ar putea să vă întrebați de ce nu am folosit-o PI în oricare dintre aceste exemple. Acronimele – în special acronimele din două litere – tind să fie întotdeauna cu majuscule sau întotdeauna cu litere mici prin convenție.