Кога да изписвате с главни букви вашите JavaScript константи

Много ръководства за стил на JavaScript предлагат главни букви с постоянни имена. Лично аз рядко виждам тази конвенция да се използва там, където мислех, че трябва да бъде. Това беше така, защото дефиницията ми за константа беше малко отклонена. Реших да направя малко ровене и да се запозная малко с тази конвенция.

Как да дефинираме термина „константа“?

В програмирането, константа е нещо, което не се променя.

Това е стойност, която не може да бъде променена от програмата по време на нормално изпълнение.

И така, дали JavaScript ни дава начин да декларираме стойност, която не може да бъде променена? Преди да отговорим на това, нека разгледаме корените на тази конвенция.

Конвенцията за капитализация се корени в C

C е компилиран език. Това означава, че друга програма преобразува целия ви код в машинен код, преди да се стартира.

JavaScript, от друга страна, е интерпретиран език. Интерпретатор чете вашия код, ред по ред, докато работи.

Разликата между компилация и интерпретация играе роля в това как декларираме постоянни стойности в C.

В C мога да декларирам променлива като тази:

int hoursInDay = 24;

Или константа като тази:

#define hoursInDay 24

Вторият пример се нарича символна константа . Символните константи могат да бъдат последователност от символи, числова константа или низ. Те се наричат ​​още примитивни стойности. Примитивните стойности в JavaScript са низове, числа, булеви числа, null, undefined, символ (да не се бърка със символни константи) и голям int.

Сега, нека преразгледаме компилацията.

Преди компилация има фаза преди компилация. Тук предварителният компилатор заменя всички случаи на символни константи със съответната стойност. Компилаторът никога не знае, че програмистът е написал hoursInDay. То вижда само номера 24.

Използването на главни букви помага на програмиста да види тези наистина постоянни стойности.

#define HOURS_IN_DAY 24

Константите на JavaScript се различават от символните константи

Преди ES6 съхранявахме повечето стойности в променливи, дори тези стойности, които искате да останат постоянни.

Капитализацията ни помогна да видим ценности, които искахме да останат постоянни.

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 представи декларацията, const която не е „константа“ в чистия смисъл.

ES6 добави термините constи letкато начини за създаване на променливи с различни намерения.

С тези два термина може да си помислите, че ние:

  1. не е необходимо да пишете с главни букви, тъй като можем ясно да видим кои променливи са предназначени да останат същите, или
  2. трябва да изписваме с главни букви всичко, с което декларираме const.

По дефиниция constсъздава константа, която е само за четене препратка към стойност. Това не означава, че стойността, която притежава, е неизменна. Това само казва, че идентификаторът на променливата не може да бъде преназначен.

С други думи, някои constпрепратки могат да се променят.

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

Горният пример показва, че декларацията constне гарантира, че променливата е неизменна.

constсамо ни пречи да се опитваме да преназначим името на променливата. Това не спира свойството на обекта да се променя. Запомнете: обектите се предават по препратка.

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

Така че, за JavaScript трябва да надхвърлим само търсенето на constдекларация. Трябва да зададем два въпроса, за да определим дали променливата е константа:

  1. Примитивна ли е стойността на променливата?
  2. Възнамеряваме ли да запазим името на променливата, сочещо към една и съща стойност в цялата ни програма?

Ако отговорът е да и на двамата, трябва да декларираме променливата с constи може да напишем името с главни букви.

Забележете, че казах „може“. Духът на тази конвенция идва от различни езици, които са имали действителни константи. JavaScript не. Поне в най-чистия смисъл. Ето защо виждате тази конвенция по-рядко, отколкото бихте очаквали. Airbnb има страхотна секция в ръководството им за стил с тяхното поведение тук.

В ключов храна за вкъщи, е да се признае, определяне на постоянна в JavaScript трябва да включва намеренията на програмиста.

Освен това не всяка конвенция от един език има смисъл на различен език. И накрая, мога само да си представя, че много конвенции са били използвани много преди IDE да имат възможностите, които имат днес. Убеден съм, че IDE ми е приятно да ми каже, че греша. Случва се много.

Благодаря за четенето!

woz

Последвай ме в Туйтър.

Бележки

  • Може би се чудите защо не използвах PIнито един от тези примери. Съкращенията - особено съкращенията от две букви - обикновено са или с главни букви, или винаги с малки букви по конвенция.