В компьютерном программировании, сигил () - это символ, прикрепленный к имени переменной, показывающий тип данных или область действия переменной, обычно префикс, как в $ foo
, где $
- сигил.
Сигил, от латинского sigillum, что означает «маленький знак», означает знак или изображение, предположительно обладающее магической силой. В 1999 был принят термин «для обозначения забавного символа в начале переменной Perl ».
Использование сигил стало популярным благодаря языку программирования BASIC. Самый известный пример сигилы в BASIC - это знак доллара ("$
"), добавляемый к именам всех строк. Многие диалекты BASIC используют другие сигилы (например," %
") для обозначения целых чисел и чисел с плавающей запятой и их точности, а иногда и других типов.
Ларри Уолл принял сценарии оболочки использует сигилы для своего языка программирования Perl. В Perl сигилы не определяют мелкозернистые типы данных, такие как строки и целые числа, но более общие категории скаляров ( с префиксом «$
»), массивы (с использованием «@
»), хэши (с использованием «%
») и подпрограмм (с использованием «»). Раку также использует вторичные сигилы, или твигилы, для обозначения области действия переменных. Выдающиеся примеры twigils в Raku включает «
^
», используемый с самопровозглашенными формальными параметрами («переменные-заполнители»), и «.
», используемый с средствами доступа к атрибутам объекта (т. е. переменными экземпляра).
В CLIPS, скалярные переменные имеют префикс «?
», тогда как многополевые переменные (например, одноуровневый список) имеют префикс «$?
».
В Common Lisp специальные переменные (с динамической областью видимости) обычно заключаются в *
в так называемом «соглашении о наушниках ». Хотя это всего лишь соглашение и не соблюдается, сам язык принимает эту практику (например, * стандартный вывод *). Точно так же некоторые программисты окружают константы символом +
.
. В CycL переменные имеют префикс «?
». Аналогичным образом, имена констант имеют префикс «# $
» (произносится как «хэш-доллар»).
В Эликсире строковые сигилы предоставляются через «~
"символ.
В MAPPER (он же BIS) именованные переменные имеют префикс «<" and suffixed with ">», потому что строки или значения символов не требуют кавычек.
В скрипте mIRC идентификаторы имеют сигил «$
», а все переменные имеют префикс «%
» (независимо от локального или глобальные переменные или тип данных). Двоичные переменные имеют префикс «».
В языке программирования MUMPS «$
» предшествует внутренним именам функций и «именам специальных переменных» (встроенным переменным для доступа к состоянию выполнения). «$ Z
» предшествует именам нестандартных встроенных функций. «$$
» предшествует именам внешних функций. Подпрограммы (используемые для процедур, подпрограмм, функций) и глобальные переменные (хранилище базы данных) имеют префикс каретки (^). На последнее поддерево глобальной переменной можно косвенно ссылаться с помощью символа вставки и последнего нижнего индекса; это называется «голая ссылка». Общесистемные процедуры и глобальные переменные (хранящиеся в определенных совместно используемых базах данных) имеют префикс ^%; они называются «процедурами процента» и «глобальными значениями процента».
В Objective-C строковые литералы, которым предшествует «@
», являются экземплярами типа объекта NSString
или, поскольку clang v3.1 / LLVM v4.0, NSNumber
, NSArray
или NSDictionary
. Префикс- @
также используется в ключевых словах interface
, implementation
и end
для выражения структуры определений классов. В объявлениях и определениях классов также используется префикс -
для обозначения методов и переменных членов, а префикс +
указывает элементы класса.
В языке PHP, который во многом был вдохновлен Perl, «$
» предшествует любому имени переменной. Имена без этого префикса считаются константами, функциями или именами класса (или именами интерфейсов или признаков, которые используют то же пространство имен, что и классы).
PILOT использует «$
» для буферов (строковых переменных), «#
» для целочисленных переменных и «*
» для меток программ..
Python использует префикс «@
» для обозначения декоратора.
В Ruby обычные переменные не имеют сигилов, но «$
"ставится перед глобальными переменными," @
"ставится перед переменными экземпляра, а" @@
"ставится перед переменные класса. Ruby также использует (строго обычные) суффиксные сигилы: «?
» указывает метод предиката, возвращающий (обычно) значение boolean ; и «!
» указывает, что метод может иметь потенциально неожиданный эффект и требует осторожного обращения.
В схеме, по соглашению, имена процедур, которые всегда возвращают логическое значение, обычно заканчиваются на «?
». Аналогично, имена процедур, которые хранят значения в частях ранее выделенных объектов Scheme (таких как пары, векторы или строки), обычно заканчиваются на «!
».
Стандартный ML использует префиксную сигилу «'
» для переменной, которая относится к типу. Если сигил удваивается, это относится к типу, для которого определено равенство. Символ «'
» может также появляться внутри или в конце переменной, и в этом случае он не имеет особого значения.
В Transact-SQL, «@
» предшествует имени локальной переменной или параметра. Системные переменные (известные как глобальные переменные) выделяются префиксом «@@
».
В Windows PowerShell, которая частично была вдохновлена оболочками Unix и Perl, имена переменных начинаются с символа «$
».
В XSLT переменные и параметры имеют начальный знак «$
» при использовании, хотя когда они определены в
или
с «name
", сигил не включается. Связанный с XSLT, XQuery использует форму сигилы «$
» как в определении, так и при использовании.
В MEL имена переменных имеют префикс «$
», чтобы отличать их от функций, команд и других идентификаторов.
В сценариях оболочки Unix и таких утилит, как Makefiles, "$
"- унарный оператор, переводящий имя переменной в ее содержимое. Хотя это может показаться похожим на сигилу, это правильно унарный оператор для лексического косвенного обращения, аналогичный *
оператору разыменования для указателей в C, что заметно по тому факту, что знак доллара опущен при присвоении переменной.
В Fortran сигилы не используются, но все переменные, начинающиеся с букв I, J, K, L, M и N, равны целые числа по умолчанию. В документации Fortran это называется «неявная типизация», хотя всегда доступна явная типизация, позволяющая объявить любую переменную с любым типом. (Выбор диапазона I – N соответствует традиционным математическим соглашениям об именах.)
Различные языки программирования, включая Prolog, Haskell, Ruby и Go обрабатывают идентификаторы, начинающиеся с заглавной буквы, иначе, чем идентификаторы, начинающиеся с маленькой буквы, практика, связанная с использованием сигил.
Фактически форма Stroping, использование многих языков в Microsoft .NET Common Language Infrastructure ( CLI) требуется способ использования переменных на другом языке, которые могут быть ключевыми словами на вызывающем языке. Иногда это делается с помощью префиксов. В C # любые имена переменных могут иметь префикс «@
». Это в основном используется для того, чтобы разрешить использование имен переменных, которые в противном случае конфликтуют с ключевыми словами. То же самое достигается в VB.Net путем заключения имени в квадратные скобки, как в [end]
.
Префикс «@
» также может применяться к строке литералы; см. буквальные аффиксы ниже.
С сигиллами связана Венгерская нотация, соглашение об именах для переменных, которое определяет тип переменной путем присоединения к переменной определенных буквенных префиксов. название. Однако, в отличие от сигил, венгерская нотация не предоставляет компилятору никакой информации; как таковые, явные типы должны быть указаны с избыточностью для переменных (если не используется язык с выводом типа ). Поскольку большинство стандартных компиляторов не предписывают использование префиксов, это допускает пропуски, а также делает код подверженным путанице из-за случайного ошибочного использования.
В то время как сигилы применяются к именам (идентификаторам)), аналогичные префиксы и суффиксы могут применяться к литералам, особенно к целочисленным литералам и строковым литералам, указывая, как следует оценивать литерал, или какой тип данных это. Например, 0x10ULL
оценивается как значение 16 как длинное длинное целое число без знака в C ++: префикс 0x
указывает шестнадцатеричное число, а суффикс ULL
указывает беззнаковое длинное длинное число. Точно так же префиксы часто используются для обозначения необработанной строки , например r "C: \ Windows"
в Python, которая представляет строку со значением C: \ Windows
; в качестве экранированной строки это будет записано как "C: \\ Windows"
.
Поскольку это влияет на семантику (значение) литерала, а не на синтаксис или семантику идентификатора (имени), это ни то, ни другое строппинг (синтаксис идентификатора) или сигил (семантика идентификатора), но он синтаксически похож.
Сравните аннотации Java, такие как @Override и @Deprecated.
В некоторых случаях один и тот же синтаксис может использоваться для разных целей, что может вызвать путаницу. Например, в C # префикс «@
» может использоваться либо для сглаживания (чтобы разрешить использование зарезервированных слов в качестве идентификаторов), либо в качестве префикса к литералу (чтобы указать необработанную строку ); в этом случае ни одно использование не является сигилой, поскольку оно влияет на синтаксис идентификаторов или семантику литералов, но не на семантику идентификаторов.