Символ долара в JavaScript

В JavaScript символ долара зазвичай зустрічається в оголошеннях змінних і викликах функцій. Дозвольте переконати вас, що тут немає нічого дивного, адже це всього лише ім’я змінної (ідентифікатор). Наприклад, шалено популярний JavaScript-фреймворк, про який я вже писав (What is jQuery?) Використовує знак долара для отримання доступу до головного об’єкту jQuery.

У багатьох компільованих і інтерпретованих мовах змінні розглядаються як ідентифікатори. Кожна мова має свій синтаксис, будь то C, C++, PHP, Java або JavaScript. І синтаксис кожної мови підпорядковується певному набору правил. Наприклад, в JavaScript правила оголошення змінних полягають в тому, що кожен ідентифікатор повинен починатися з літери латинського алфавіту, символу долара ($) або підкреслення (_) і не може починатися з цифр (від 0 до 9) і інших символів, таких як знаки пунктуації. Обидва згаданих символи ($ і _) нестандартні і можуть зустрічатися і в іншій частині ідентифікатора. Так, наприклад, ім’я змінної, заданої п’ятьма знаками долара поспіль: $$$$$ (або ж будь-якою кількістю підкреслень) абсолютно прийнятне, оскільки підпорядковується правилам синтаксису мови JavaScript. Це проста вимога мови JavaScript, з якою програмісти повинні змиритися. Повірте, для цього є вагомі причини.

У одному коді жив собі глобальний об’єкт функції, чиїм ім’ям був простий знак $. Такий стиль коду (відсутність ключового слова var) досвідченими програмістами визнаний небажаним, ми намагаємося не використовувати глобальні змінні в JavaScript, якщо, звичайно, не намагаємося схитрувати. Як би там не було, суть в тому, що ця функція могла б бути названа майже як завгодно: a, z або навіть _.

// Приклад коректних ідентифікаторів
 
var A = function() {
    alert("функція A була викликана");
}
 
var $ = function() {
    alert("функція $ була викликана");
}
 
var _ = function() {
    alert("функція _ була викликана");
}

Більше того, в JavaScript версій 1.5 і вище, крім знака долара і символу підкреслення, ви можете використовувати в ідентифікаторах символи кодувань ISO 8859-1 і Unicode, наприклад Ø. Ви можете здивуватися, але дозволено використовувати навіть Unicode-послідовності виду uXXXX, де XXXX – число, наприклад 0024. Unicode-символ u0024 еквівалентний – вгадайте, чому? … Знаку долара. І ви можете навіть викликати функцію, задану ідентифікатором u0024, використовуючи для посилання знак долара! Звичайно, не варто використовувати це всюди тільки тому, що так можна. Я вважаю, що це небажана практика, багато програмістів можуть бути інформовані гірше, ніж ви, і через такі «фішки» код буде здаватися їм заплутаним і нечитабельним.

Як ви напевно знаєте, JavaScript – об’єктно-орієнтована мова програмування. Є декілька різних способів присвоєння значення ідентифікатору. Наприклад, коли ми використовуємо ключове слово var, JavaScript створює змінну в поточній (або локальній) області видимості. Якщо ми пропустимо ключове слово var, змінна все одно буде створюватися, але вже в глобальному контексті програми, що означає, що вона буде видима в усьому файлі .js. І знову хочу нагадати: уникайте глобальних змінних. Я розумію, що ця стаття про знак долара, але, якщо вам все ще не очевидно, глобальні змінні нагадають про себе, коли ви зіткнетеся з масштабними проектами, різні компоненти яких написані кимось іншим або розроблені в команді програмістів. Отже, якщо хтось говорить вам, що використовувати глобальні змінні без ключового слова var – цілком нормально, не вірте – вас обманюють.

І ще. Оскільки змінні в JavaScript є об’єктами, ви можете посилатися на функції своїми змінними. Ви навіть можете привласнити «функцію-член» уже існуючій функції. Але спроба привласнити функцію об’єкту, який ще не існує, приречена на провал в JavaScript. Якщо ви дійсно хочете добре розібратися, зверніть особливу увагу на наведений нижче код.

Тепер, використовуючи отримані знання і не запускаючи цей код в браузері, чи можете ви сказати, чи буде він працювати?

За угодою, символ долара ($), підкреслення (_) і навіть деякі символи ASCII можуть використовуватися в будь-якому місці ідентифікатора в JavaScript. У документації Ecma Script (7.6 Identifiers, ECMA-262, 3rd Ed.) сказано: «Символ долара призначений для використання тільки в автоматично створеному коді». Це означає, що ми не повинні використовувати символ долара ($) в ідентифікаторах, крім тих випадків, коли ми пишемо фреймворк. Ось список дозволених символів, які можуть використовуватися в ідентифікаторах:

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
UnicodeEscapeSequence

Мета цієї статті – показати, що символ долара – всього лише ідентифікатор (реалізований популярним фреймворком Prototype і потім підхоплений розроблювачами jQuery) і нічого більше. Чому програмісти використовують його? Ну, це дуже зручне ім’я для функції, що має чітке призначення в коді фреймворка. З цієї причини головний об’єкт jQuery, визначений як знак долара, є синонімом об’єкта jQuery. У звичайному коді ми використовуємо об’єкт jQuery замість $. Якщо ви добре розбираєтеся в jQuery і приділяєте достатню увагу документації, використання синоніма $ замість об’єкта jQuery небажане, хоча, чомусь він дуже популярний серед програмістів, які вважають це доречним.

Підведемо підсумки

Різниця в використанні символу долара – смислова. Це ім’я ідентифікатора. З точки зору психології, воно виглядає зручно і витончено. Технічно ж, це всього лише функція або символьне посилання на змінну, насправді немає ніякої різниці у використанні $ або _ або будь-якого іншого символу.

Символ $, як сказано в специфікації Ecmascript, дозволений для використання в ідентифікаторах. Якщо ідентифікатор складається з єдиного символу $, він, звичайно, виглядає дивно, але така різниця помітна тільки людині. Наскільки я знаю, для компілятора було б все одно, якби змінна складалася з будь-якого іншого символу, наприклад a або b.

З іншого боку, специфікація Ecmascript повідомляє, що символ $ повинен використовуватися у внутрішньому коді, яким є код фреймворка jQuery, просто для зручності. Це означає, що не варто використовувати його в своєму коді тільки тому що це гарно виглядає, але при розробці фреймворка з цього дійсно можна отримати вигоду, так як глобальний об’єкт фреймворка буде виглядати унікальним і виділятися з решти коду.