Коли слід використовувати великі константи JavaScript

Багато керівництв щодо стилів JavaScript пропонують використовувати великі імена констант. Особисто я рідко бачу, щоб цей конвент використовувався там, де я вважав, що має бути. Це було тому, що моє визначення константи було дещо відхиленим. Я вирішив трохи копати і трохи більше ознайомитися з цією конвенцією.

Як ми визначаємо термін «константа»?

У програмуванні константа - це те, що не змінюється.

Це значення, яке програма не може змінити під час звичайного виконання.

Отже, чи дає нам JavaScript спосіб оголосити значення, яке не можна змінити? Перш ніж відповісти на це, давайте розглянемо коріння цієї конвенції.

Конвенція про капіталізацію сягає корінням у С

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

Слідуйте за мною у Twitter.

Примітки

  • Ви можете здивуватися, чому я не використав PIжодного з цих прикладів. Абревіатури - особливо двобуквені абревіатури - як правило, або завжди пишуться з великої літери, або завжди в нижньому регістрі за домовленістю.