Роки тому я навчився Applesoft Basic. Струни завжди були суфіксними, $
а масиви мали суфікс %
. Ось як працювала мова. Ви щось подивилися, знали, що це. Я ніколи не заглиблювався в інтерпретатора, щоб зрозуміти, чому це так, чи проектні рішення, які зробили це так.
Сигіл у php походить від його перл-впливу (на який впливали awk
і sh
). Сигіл в perl - це трохи більше, ніж просто, $
оскільки він може ідентифікувати безліч різних типів:
$
скалярний
@
список
%
хеш
&
кодовий блок
*
typeglob
Сигіл визначає, яку частину структури таблиці символів ви дивитесь. За кадром, в таблиці символів для foo (доступ до якого здійснюється через *foo
- typeglob) є все, що може бути фоном. Існує $foo
, @foo
, %foo
, то формат foo
, &foo
, то указатель_на_файл Foo, і т.д ...
Це також дозволяє зробити псевдонім однієї змінної до іншої:
#!/usr/bin/perl
$foo = "foo";
@qux = (1,2);
*bar = \$foo;
*bar = \@qux;
print "$bar @bar\n";
Це відбитки foo 1 2
- в перл, це для чого насправді сигіли , не те, що ви повинні це робити, а скоріше, щоб це було за кадром, що вони роблять.
Сигілів не стільки для читабельності, скоріше для того, щоб можна було мати $foo
і @foo
без зіткнення в просторі імен (порівняйте інші мови, де не може бути обох int foo; int[] foo;
)
Сигнали для читабельності - це те, що вивчається як частина будь-якої мови - читання синтаксису. Можна, гіпотетично, примусити сам тип (як угорська позначення) бути частиною ідентифікатора.
Щось у lex по лінії:
typeChar [is]
capLetter [A-Z]
letter [a-z]
digit [0-9]
%%
{typeChar}{capLetter}(letter}|{digit})* { prientif("iddentifier");}
%%
І тоді ви могли мати такий код
iFoo = 42;
sFoo = "a string";
iBar = iFoo * 2;
Я не кажу, що це гарна ідея, але скоріше, що той, хто звик до мови, зможе прочитати це на самому світі і подумає, що це підвищує читаність, а хтось, хто не знайомий з мовою, може подумати, що це просто додає купа шуму до мови.
Однак, працюючи з мовою, визначеною таким чином, я, мабуть, міг її прочитати без проблем.
Деякі люди їх люблять, деякі - ні. На різних форумах проводяться великі святі війни, і це дійсно зводиться до того, наскільки ви їх використали.
Можна створити нову мову для непрограмістів, які використовують сигіли, і той, хто ніколи раніше не програмував, ніколи не скаржиться на них. З іншого боку, ви не можете їх мати як частину мови, а потім програмісти рубіну чи perl скаржаться, що вони пропускають якусь ключову інформацію.
Це насправді не має значення. Важливо, як сигіли вписуються в мову, якщо ви їх використовуєте чи ні. Ви хочете вміти "123 $foo 456"
чи потрібно робити "123 " + foo + " 456"
? Саме тут слід прийняти рішення.