Багато мов сценаріїв, такі як Perl, Awk, Bash, PHP тощо, використовують знак $ перед іменами ідентифікаторів. Я намагався шукати, чому, але ніколи не мав задовільної відповіді.
Багато мов сценаріїв, такі як Perl, Awk, Bash, PHP тощо, використовують знак $ перед іменами ідентифікаторів. Я намагався шукати, чому, але ніколи не мав задовільної відповіді.
Відповіді:
Шкаралупа Борна або його попередник, ймовірно, був джерелом конвенції. Оболонки, як правило, використовують $foo
для позначення змінної оболонки або змінної середовища, тоді як просто foo
приймається як буквальна рядок (яка може бути ім'ям команди, ім'ям файлу або просто словом, яке передається іншій команді).
Мабуть, справа в тому, щоб мінімізувати, скільки потрібно вводити. У більшості мов програмування більшість того, що ви вводите, буде ключовими словами (з невеликого фіксованого набору) та назвами речей, які були оголошені; має сенс використовувати лише ім’я для тих. Лінійні рядки вкладаються у лапки (одинарні чи подвійні), щоб їх синтаксично розрізнити.
В інтерактивній оболонці більшість речей, які ви вводите, будуть іменами команд та іменами файлів, тому мати необмежену форму для них має сенс. Імена змінних використовуються не так часто, тому передувати їх $
- це простий спосіб їх розрізнення.
Наслідком того, $
що деякі BASIC використовують для рядкових змінних (на відміну від числових змінних), ймовірно, було також натхненням.
Вибір Perl використовувати $
для скалярних змінних, безсумнівно, був натхненний оболонками, такими як оболонка Борна, та ранніми версіями Perl, що зазвичай розглядаються баревами як строковими буквами ( print FOO
і print "FOO"
були еквівалентними). У сучасних версіях Perl це використання перехідних мов було вимкнено, але сигіли залишаються і в основному використовуються для розрізнення різних типів змінних. Можливо, якби Perl розроблявся з нуля, скалярні змінні можуть бути позначені "порожнім знаком", але цього не сталося.
(BTW, Awk не використовує sigils. У нього є $
синтаксис, але він посилається на номери полів. NF
Це кількість полів; $NF
це останнє (це NF
) поле.)
Знак $ у назві змінної - це особливий випадок "Sigil" , ще в перші дні BASIC (1964 або більше) $ використовувався для позначення імен змінних рядків. Я думаю, оскільки компіляторам полегшує відокремлення імен змінних від решти граматики, використовуючи якийсь символ, а оскільки це було загальноприйнято для BASIC, його використання прогресувало. Однак це не єдине, що використовується.
$
для (і %
для цілих чисел) у Basic були суфіксом, а не префіксом, принаймні у (нестандартних) варіантах, які мені завдавали. Зрозуміло, що це не так важливо - суфікс проти префікса є досить поверхневим, принаймні, що стосується компіляторів та лексичного аналізу. Можливо, є незначна різниця в частині читабельності.
Це, мабуть, бере початок у BASIC, де суфікс $ вказує на змінну рядка, а також вимовлявся як "рядок". Наприклад, INKEY $ вимовляється "у рядку ключів".
Але чому знак долара? Ну, $ виглядає трохи як S для рядка. А згідно з Вікіпедією :
Оскільки знак долара є одним з небагатьох символів, який, з одного боку, майже повсюдно присутній у комп’ютерних наборах символів, але, з іншого боку, рідко потрібен у їх буквальному значенні в межах комп'ютерного програмного забезпечення, символ $ використовується на комп'ютерах для багатьох цілей, не пов'язаних з грошима.
(Відповідно, на кілька доларів більше , ніж на телевізорі, коли я це набираю.)
Чому ні? Простіше написати лексер, який може сказати, що ідентифікатор буде змінною (і, отже, простіше написати парсер), особливо для інтерпретованої мови. Щодо того $
, це, мабуть, багато в чому традиція - хтось із творців ранньої мови, що використовує конструкцію (Баш? Або, швидше за все, її попередник), використовував її з будь-якої причини і наступні мови її прийняли.