В чем преимущество Сигилс в Perl?
Я понимаю правила с сигилами. Я могу делать хэши из списков и передавать ссылки с их посредственным отношением. Чего я не понимаю, так это тех преимуществ, которые сигилы предоставляют в Perl.
Некоторые из причин, которые я слышал:
- Строковая интерполяция
- В Ruby есть синтаксис "#{myVar}", который решает почти все эти проблемы, включая использование полных выражений, без необходимости прибегать к синтаксическому хаку "@{[$count + 1]}".
- Readibility
- Иды. И любой текстовый редактор, достойный веса, имеет подсветку синтаксиса.
- Учет переменной subNamespacing
- Позволение мне объявить $ foo и @foo как две разные переменные приведет только к краху в будущем.
Одна очень полезная функция в языке программирования - это согласованность. Мое любопытство заставляет меня спросить, объявляю ли я список как "@foos" и счетчик "$ count", как имеет смысл обращаться к элементам, говоря "$foos[$count]"? Ой! Но я могу использовать "@", если я читаю элементы в контексте списка; так что выражение "@foos[$idx1, $idx2]" теперь имеет смысл! Посмотрев на сигилу, я могу сказать, что я собираюсь читать массив вместо одного скаляра!
- Я все еще могу сказать, что читаю один элемент, сказав "foos[count]"
- Я все еще могу сказать, что читаю несколько элементов, говоря "foos[idx1, idx2]".
- Я все еще могу сказать, что читаю одно значение, сказав "foos{key}"
- Я все еще могу сказать, что читаю несколько значений, сказав "foos{key1, key2}"
Та же самая картина имеет место почти для любого случая, о котором я могу думать. Смысл того, что делается, ясен независимо от того, какой символ используется, или нет в этом отношении. Единственное отличие состоит в том, что я должен следить за контекстом и быть уверенным, что сигилы тоже находятся на одной линии;
1 ответ
Лучшее объяснение можно найти в perldata в perldoc. Они функционируют как статьи и местоимения на естественном языке.
Символ '$' семантически работает как английское слово "the" в том смысле, что он указывает на ожидаемое единственное значение.
Целые массивы (и фрагменты массивов и хэшей) обозначаются символом "@", который во многом аналогичен слову "эти" или "те" в английском языке, поскольку указывает на то, что ожидается несколько значений.
Perl 6 пошел другим путем, поэтому мнения об их ценности различны, но это теория, стоящая за ними.