Автоматное программирование
- 1 year ago
- 0
- 0
В
программировании
,
сигил
— это символ, прикрепленный к имени
переменной
, обозначающий
тип данных
или
область видимости
, как правило, префикс, как в
$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, обрабатывают идентификаторы, начинающиеся с заглавной буквы, иначе, чем идентификаторы, начинающиеся с маленькой буквы.
В 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,
такие как
@Override
и
@Deprecated
.
В некоторых случаях один и тот же синтаксис может использоваться для разных целей, что может вызвать путаницу. Например, в
C#
префикс «
@
» может использоваться и как stropping, и как префикс к литералу (для обозначения неэкранированных строк); в этом случае ни одно использование не является сигилом, поскольку оно влияет на синтаксис идентификаторов или семантику литералов, а не на семантику идентификаторов.
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; […]