Interested Article - Сигил (программирование)

В программировании , сигил — это символ, прикрепленный к имени переменной , обозначающий тип данных или область видимости , как правило, префикс, как в $foo , где $ является сигилом.

от латинского , что означает «маленький знак», означает знак или изображение, предположительно обладающее магической силой . Сигилы могут использоваться для разграничения пространств имен , которые обладают разными свойствами и поведением.

Исторический контекст

Использование сигилов было популяризировано языком программирования Бейсик . Самый известный пример сигила в BASIC — знак доллара $ »), добавляемый к именам всех строк . Многие диалекты BASIC используют и другие сигилы (например, « % ») для обозначения целых чисел , чисел с плавающей запятой и, иногда, других типов.

Ларри Уолл добавил сигилы в свой язык программирования Perl , подражая сигилам в сценариях командной строки . [ источник не указан 889 дней ] В Perl сигилы определяют не типы данных, такие как строки и целые числа, а более общие категории: скаляры (префикс « $ » от англ. scalar ), массивы (префикс « @ » от англ. array ), хэши (префикс « % ») и подпрограммы & »). Язык Raku также использует вспомогательные сигилы, располагающиеся между сигилами и названиями переменных, твигилы , для обозначения областей видимости переменных. Яркие примеры твигилов в Raku: « ^ », используемый с самопровозглашёнными в теле блока или подпрограммы позиционными аргументами этого блока или подпрограммы; « . », используемый с атрибутами объектов (свойствами и методами).

В CLIPS , у скалярных переменных префикс « ? », а у множественных (например, одноуровневых списков) — префикс « $? ».

В Common Lisp переменные с динамической областью видимости обычно заключаются в « * » («earmuff convention»). Хотя это всего лишь соглашение, и вовсе не обязательно так делать, сам язык использует эту практику (например, *standard-output* ). Некоторые программисты заключают константы в « + ».

В CycL перед переменными стоит знак « ? ». Имена констант начинаются с префикса « #$ » (произносится как «хэш-доллар»).

В Elixir сигилами называются формы синтаксиса, начинающиеся с символа « ~ », позволяющие объявлять регулярные выражения, строковые литералы, списки, даты.

В MAPPER (он же BIS), именованные переменные берутся в треугольные скобки, так как строки и символы не требуют кавычек.

В сценариях MIRC , идентификаторы (возвращают вычисляемые значения ) пишутся с префиксом « $ », а переменные — с префиксом « % » (как локальные, так и глобальные). У переменных для двоичных данных произвольного размера — префикс « & ».

В языке программирования MUMPS символ « $ » предшествует именам системных функций и «именам специальных переменных» (системным переменным для доступа к состоянию выполнения). Сигил « $Z » предшествует именам нестандартных системных функций. Сигил « $$ » предшествует именам пользовательских функций. Имена подпрограмм ( ) и глобальных переменных (хранятся на диске), начинаются с символа «^».

В Objective-C строковые литералы, которым предшествует « @ », являются экземплярами класса NSString или, начиная с clang v3.1 / LLVM v4.0, NSNumber , NSArray или NSDictionary . Префикс « @ » также используется в ключевых словах @interface , @implementation и @end , используемых в синтаксисе определения классов. В классах также используется префикс « - » для обозначения методов и полей экземпляра (объекта), а префикс « + » указывает на элементы класса (то есть типа объектов).

В языке PHP , который во многом был вдохновлен Perl, « $ » стоит перед именами всех переменных. Имена без этого префикса считаются константами , именами функций или классов (или именами интерфейсов или типажей , которые используют то же пространство имен, что и классы).

PILOT использует « $ » для буферов (строковых переменных), « # » для целочисленных переменных и « * » для меток .

Python использует « @ » ( pie syntax) для навешивания декораторов и « __ », (dunder ) для «приватных» членов класса.

В Ruby у обычных переменных нет сигилов, но перед глобальными переменными ставится « $ », перед переменными экземпляров ставится префикс « @ », а перед переменными класса — префикс « @@ ». В Ruby также используются (строго конвенциональные) суффиксные сигилы: « ? » указывает метод предиката, возвращающий булевое значение; « ! » указывает, что метод может иметь потенциально неожиданный эффект и требует осторожного обращения.

В Scheme по соглашению имена процедур, которые всегда возвращают логическое значение, обычно оканчиваются на « ? ». Имена процедур, которые хранят значения в частях предварительно выделенных объектов Scheme (таких как пары, векторы или строки), обычно заканчиваются на « ! ».

Standard ML использует префиксный сигил « ' » для переменных, которые относятся к типам. Если сигил удваивается, это относится к типу, для которого определено равенство. Символ « ' » также может появляться внутри или в конце имён переменных, и в этом случае у него нет чёткого значения.

В Transact-SQL символ « @ » предшествует имени локальной переменной или параметра. Системные переменные (известные как глобальные переменные) выделяются с помощью « @@ ».

В Windows PowerShell , который частично был вдохновлен оболочкой Unix и Perl, имена переменных начинаются с символа « $ ».

В XSLT у переменных и параметров при использовании есть префикс « $ », хотя при определении в <xsl:param> или <xsl:variable> в атрибуте name сигил не добавляется. Связанный с XSLT язык XQuery использует « $ » как в определении, так и при использовании.

В MEL у имён переменных есть префикс « $ », чтобы их можно было отличать от функций, команд и других идентификаторов.

Похожие явления

Переменные командной оболочки

В Unix shell и таких утилитах, как Makefiles , « $ » — это унарный оператор , переводящий имя переменной в её содержимое. Несмотря на внешнее сходство, знак в данном случае не является частью имени, что заметно по его отсутствию в присваивании. Аналог в Си указателей.

Соглашения об идентификаторах

В Фортране сигилы не используются, но все переменные, начинающиеся с букв I, J, K, L, M и N, по умолчанию являются целыми числами. В документации Fortran это называется «неявная типизация», хотя всегда доступна явная типизация, позволяющая объявить любую переменную с любым типом. Выбор диапазона I-N соответствует традиционным соглашениям об именах переменных в математике .

Различные языки программирования, включая Prolog , Haskell , Ruby и Go, обрабатывают идентификаторы, начинающиеся с заглавной буквы, иначе, чем идентификаторы, начинающиеся с маленькой буквы.

Stropping

В Microsoft .NET Common Language Infrastructure (CLI) есть способ экранирования переменных на вызываемом языке, которые могут быть ключевыми словами на вызывающем языке, называемый в англоязычных источниках . Иногда это делается с помощью префиксов. Например, в C# имена переменных могут начинаться с префикса « @ ». В VB.Net для той же цели используются квадратные скобки.

Венгерская нотация

С сигилами связана венгерская нотация соглашение об именах переменных, которое определяет тип переменной путем добавления определенных буквенных префиксов к имени переменной. В отличие от сигилов, венгерская нотация не предоставляет компилятору никакой информации; типы должны быть явно указаны для переменных (если не используется язык с выводом типов ). Поскольку большинство стандартных компиляторов не предписывают использование префиксов, это позволяет совершать ошибки и делает код подверженным путанице из-за случайного неверного использования.

Буквенные аффиксы

В то время как сигилы применяются к именам (идентификаторам), аналогичные префиксы и суффиксы могут применяться к литералам , особенно к целочисленным и строковым, определяя либо способ интерпретации литерала, либо его тип данных. Например, 0x10ULL расценивается как значение 16 с типом данных unsigned long long в C++ : 0x указывает, что это шестнадцатеричное число, а суффикс ULL обозначает тип. Префиксы часто используются для обозначения строк без экранирования символов . Например r"C:\Windows" в Python в виде экранированной строки было бы записано как "C:\\Windows" .

Поскольку это влияет на семантику (значение) литерала, а не на синтаксис или семантику идентификатора (имени), это не stropping (синтаксис идентификатора) и не сигил (семантика идентификатора), несмотря на синтаксическое сходство.

Аннотации Java

Например, встроенные аннотации Java, такие как @Override и @Deprecated .

Путаница

В некоторых случаях один и тот же синтаксис может использоваться для разных целей, что может вызвать путаницу. Например, в C# префикс « @ » может использоваться и как stropping, и как префикс к литералу (для обозначения неэкранированных строк); в этом случае ни одно использование не является сигилом, поскольку оно влияет на синтаксис идентификаторов или семантику литералов, а не на семантику идентификаторов.

См. также

Примечания

  1. Владимир Леттиев. . Pragmatic Perl (13 марта 2014). — «...можно использовать обычный сигил [...] В данном примере функцию интересуют только первый и четвёртый аргументы. Для остальных аргументов указаны заполнители позиций: сигилы $ и @, они не будут определяться внутри функции.» Дата обращения: 13 сентября 2021. 13 сентября 2021 года.
  2. Андрей Шитов. . Pragmatic Perl (22 декабря 2014). — «В Perl 6 для переменных используются сигилы, частично совпадающие с тем, что есть в Perl 5. В частности, скаляры, списки и хеши используют, соответственно, сигилы $, @ и %.» Дата обращения: 13 сентября 2021. 13 сентября 2021 года.
  3. . . Дата обращения: 22 мая 2012. 1 мая 2021 года.
  4. от 17 июня 2016 на Wayback Machine , Perl 6 Documentation
  5. . www.Cyc.com . Дата обращения: 31 декабря 2017. 25 января 2018 года.
  6. . www.Cyc.com . Дата обращения: 31 декабря 2017. 25 января 2018 года.
  7. . Эликсир и Вунш (2020). Дата обращения: 13 сентября 2021. 13 сентября 2021 года.
  8. (англ.) . elixir-lang.github.com . Дата обращения: 27 июля 2021. 2 августа 2021 года.
  9. . www.mirc.com . Дата обращения: 27 июля 2021. 9 августа 2021 года.
  10. . Дата обращения: 9 августа 2021. 3 июня 2020 года.
  11. Black. (15 августа 2007). 22 мая 2016 года.
  12. . docs.oracle.com . Дата обращения: 4 августа 2021. 25 февраля 2021 года.
  13. King, Peter R., ed. (1974-06-18). . Proceedings of an International Conference on ALGOL 68 Implementation . Department of Computer Science, University of Manitoba, Winnipeg: University of Manitoba, Department of Computer Science: 148. ISBN 9780919628113 . из оригинала 9 августа 2021 . Дата обращения: 9 августа 2021 . More serious problems are posed by "stropping", the technique used to distinguish boldface text from roman text. Some implementations demand apostrophes around boldface (whence the name stropping); others require backspacing and underlining; […]
  14. . MSDN . Дата обращения: 23 марта 2011. 28 января 2017 года.
  15. . MSDN . Дата обращения: 23 марта 2011. 14 марта 2011 года.
  16. от 9 августа 2021 на Wayback Machine , by Linus Torvalds
Источник —

Same as Сигил (программирование)