Кто-нибудь знает, какова фактическая причина «обозначения переменной доллара» на некоторых языках сценариев, то есть PHP или Perl? Создатели Python не нашли $variable
полезной, и я тоже. Почему PHP и Perl заставляют меня так часто менять shift-4?
(ОК, в Perl вы можете как-то объяснить это с помощью отличия $scalar
, @array
и %hash
но все же его можно было бы успешно избежать там, тип не обязательно должен быть явным)
Я не знаю, является ли это основной причиной, но если у PHP не было переменных с идентификационным маркером, следующее было бы невозможно.
echo "Welcome back $name, we last saw you on $date";
Обновить:
Он также создает нечто, называемое переменной переменной . Полезность переменной переменной является дискуссионным, хотя, и я не рекомендую никому делать регулярное их использование.
Одна из целей дизайна с переменными Perl заключалась в том, чтобы сделать их визуально различимыми от встроенных, зарезервированных слов, слов потока управления и т. Д. Для кого-то, незнакомого с Perl, все подсказки могут выглядеть как линейный шум. Но для кого-то, владеющего Perl, «сигилы», как их называют, делают код более понятным и понятным. Как вы уже заметили, тип sigil в Perl5 изменяется в зависимости от доступа к базовым данным. $ для скалярного, @ для массива и% для хеша.
Но есть дополнительный визуальный сигнал, который $hash{key}
относится к скалярному значению, хранящемуся в хэше. $
Sigil указывает на скаляр, а скобки {}
указывают, что мы индексируем хэш (как пример). В случае индексирования в массив, $array[0]
, например: $
говорит нам, что мы получаем доступ к скалярному значению, хранящемуся в массиве, что очевидно в квадратных скобках, в индексной точке в скобках. Когда мы видим @array[1, 2, 3]
, у нас есть непосредственное визуальное уведомление через @
которое мы захватываем список элементов (при условии контекста списка) из массива (квадратные скобки все еще говорят нам, что мы 'получить их из массива). Это срез массива. Хэш-срез будет @hash{qw/ this that the other/}
. Итак, еще раз, что @
говорит нам искать список, а фигурные скобки говорят нам, что мы получаем их из хэша. Когда мы видим @
или %
без постфиксных скобок, мы берем весь массив или хеш.
Сигналы становятся второй природой быстро.
Perl6 немного отличается, и через несколько дней вы сможете использовать опытных пользователей Perl5. 😉
Здесь есть хорошая статья в Википедии: Сигил (компьютерное программирование)
Помимо визуального руководства, сигилы облегчают другие вещи; разыменование и интерполяция, например. Хотя более сложные операторы могли быть использованы для чего-то вроде интерполяции (и по-прежнему необходимо время от времени устранять неоднозначность, где заканчивается переменная и примыкающие символы слова), цель, вероятно, заключалась в том, чтобы упростить простые вещи, делая все возможное.
Принципы естественного языка в Perl :
Одной из причин, по которым язык может уйти от некоторых локальных двусмысленностей, является то, что другие двусмысленности подавляются различными механизмами. Английский использует число и порядок слов, с остатками системы case в местоимениях: «Человек посмотрел на мужчин, и они оглянулись на него». В этом предложении совершенно ясно, кто что делает, кому. Точно так же Perl имеет числовые маркеры в своих существительных; то есть
$dog
– это один@dog
, а@dog
(потенциально) много. Таким образом,$
и@
немного похожи на «это» и «на английском».
Они используют его при разборе, так что переменные можно легко отличить от других вещей.