Сигил (компьютерное программирование)
В компьютерном программировании символ ) — это ( / ˈ s ɪ dʒ əl / символ, прикрепленный к имени переменной переменной , показывающий тип данных или область действия , обычно это префикс, как в $foo
, где $
это символ.
Сигил , от латинского sigillum , что означает «маленький знак», означает знак или изображение, предположительно обладающее магической силой . [1] Сигиллы можно использовать для разделения и разграничения пространств имен , обладающих разными свойствами или поведением.
Исторический контекст
[ редактировать ]Использование сигилов было популяризировано языком программирования BASIC . Самый известный пример символа в BASIC — знак доллара (« $
") добавляется к именам всех строк . Следовательно, программисты за пределами Америки, как правило, [ нечеткий ] произносить $
как «строка» вместо «доллар». [ нужна ссылка ] Многие диалекты BASIC используют другие символы (например, « %
") для обозначения целых чисел и чисел с плавающей запятой и их точности, а иногда и других типов.
Ларри Уолл принял сценариях оболочки использование сигилов в для своего языка программирования Perl . [ нужна ссылка ] В Perl символы определяют не детальные типы данных, такие как строки и целые числа, а более общие категории скаляров (с использованием префикса " $
"), массивы (с использованием " @
"), хеши (с использованием " %
") и подпрограммы (с использованием " &
"). Раку также использует вторичные сигилы, или веточки , [2] для указания области действия переменных. Яркие примеры ветвей в Раку включают « ^
" ( каретка ), используется с самообъявленными формальными параметрами ("переменные-заполнители") и " .
", используемый с методами доступа к атрибутам объекта (т. е. переменными экземпляра).
Использование сигила в некоторых языках
[ редактировать ]В CLIPS скалярные переменные имеют префикс « ?
", а многополевые переменные (например, одноуровневый список) имеют префикс " $?
".
В Common Lisp специальные переменные (с динамической областью действия) обычно заключаются в окружение. *
в так называемом « соглашении о наушниках ». Хотя это всего лишь соглашение, а не принудительное исполнение, сам язык принимает эту практику (например, *стандартный вывод*). Точно так же некоторые программисты окружают константы +
.
В CycL переменные имеют префикс « ?
"сигила. [3] Аналогично, имена констант начинаются с префикса " #$
(произносится как «хеш-доллар»). [4]
В Elixir символы предоставляются через " ~
", за которым следует буква, обозначающая тип символа, а затем разделители. Например, ~r(foo)
является регулярным выражением «foo». Другие символы включают в себя ~s
для струн и ~D
для свиданий. Программисты также могут создавать свои собственные символы. [5]
В эзотерическом языке INTERCAL переменные представляют собой 16-битный целочисленный идентификатор с префиксом « .
" (называемый "спот") для 16-битных значений, " :
" (так называемый "twospot") для 32-битных значений, " ,
" ("хвост") для массивов 16-битных значений и " ;
"("гибрид") для массивов 32-битных значений. [6] Более поздний CLC-Intercal добавил: « @
" ("водоворот") для переменной, которая не может содержать никакого значения (используется для классов ) и " _
"используется для хранения измененного компилятора . [7]
В MAPPER (также известном как BIS) именованные переменные имеют префикс «<» и суффикс «>», поскольку строки или символьные значения не требуют кавычек.
В сценарии mIRC идентификаторы имеют " $
" сигил, а все переменные имеют " %
" с префиксом (независимо от локальных или глобальных переменных или типа данных). Двоичные переменные имеют префикс " &
".
На MUMPS " языке программирования $
" предшествует именам встроенных функций и "именам специальных переменных" (встроенные переменные для доступа к состоянию выполнения). " $Z
" предшествует нестандартным именам встроенных функций. " $$
" предшествует именам внешних функций. Подпрограммы (используемые для процедур, подпрограмм, функций) и глобальные переменные (хранилище базы данных) имеют префикс курсора (^). На последнее поддерево глобальных переменных можно косвенно ссылаться с помощью курсора и последнего нижнего индекса; это называется «голой ссылкой». Общесистемные процедуры и глобальные переменные (хранящиеся в определенных общих базах данных) имеют префикс ^%; они называются «процентными подпрограммами» и «процентными глобальными переменными».
В Objective-C строковым литералам предшествует " @
" являются экземплярами типа объекта NSString
или, начиная с clang v3.1/ LLVM v4.0, NSNumber
, NSArray
или NSDictionary
. Префикс @
также используется в ключевых словах interface
, implementation
, и end
для выражения структуры определений классов. В объявлениях и определениях классов также используется префикс -
используется для обозначения методов и переменных-членов, а префикс +
указывает элементы класса.
В языке PHP , который во многом был вдохновлен Perl: $
" предшествует любому имени переменной . Имена, не начинающиеся с этого префикса, считаются константами , именами функций или классов (или именами интерфейсов или свойств, которые используют то же пространство имен, что и классы).
ПИЛОТ использует " $
" для буферов (строковые переменные), " #
" для целочисленных переменных и " *
" для ярлыков программ.
Python использует " __
Префикс « dunder » для «частных» атрибутов .
В Ruby обычным переменным не хватает символов, но " $
" ставится перед глобальными переменными " @
" ставится перед переменными экземпляра и " @@
" ставится перед переменными класса . Ruby также допускает (строго традиционные) суффиксные символы: " ?
" указывает на метод-предикат, возвращающий логическое значение , истинное или ложное значение, и " !
" указывает на то, что метод может иметь потенциально неожиданный эффект и требует осторожного обращения. [8]
В Scheme по соглашению имена процедур, которые всегда возвращают логическое значение, обычно заканчиваются на « ?
". Аналогично, имена процедур, которые сохраняют значения в частях ранее выделенных объектов Scheme (таких как пары, векторы или строки), обычно заканчиваются на " !
".
Стандартный ML использует префикс сигил " '
" для переменной, которая ссылается на тип. Если символ удваивается, он относится к типу, для которого определено равенство. " '
Символ " также может появляться внутри или в конце переменной, и в этом случае он не имеет особого значения.
В Transact-SQL " @
" предшествует имени локальной переменной или параметра. Системные функции (ранее известные как глобальные переменные) отличаются знаком " @@
Префикс ". Область действия временных таблиц обозначается префиксом " #
"обозначение местных и" ##
"обозначая глобальный.
В Windows PowerShell , которая частично была вдохновлена оболочками Unix и Perl, имена переменных начинаются с префикса " $
"сигила.
В XSLT переменные и параметры имеют начало " $
" сигил при использовании, хотя, если он определен в <xsl:param>
или <xsl:variable>
с " name
", сигил не включается. Что касается XSLT, XQuery использует атрибут " $
«Форма сигилы как по определению, так и по использованию.
В MEL имена переменных начинаются с префикса « $
", чтобы отличать их от функций, команд и других идентификаторов.
Подобные явления
[ редактировать ]Переменные сценария оболочки
[ редактировать ] Unix В сценариях оболочки и таких утилитах, как Makefiles , " $
" — это унарный оператор, который преобразует имя переменной в ее содержимое. Хотя он может показаться похожим на сигилу, на самом деле это унарный оператор для лексической косвенности , аналогичный оператору *
оператор разыменования указателей в C , что заметно по тому факту, что знак доллара опускается при присвоении переменной.
Соглашения об идентификаторах
[ редактировать ]В Фортране сигилы не используются, но все переменные, начинающиеся с букв I, J, K, L, M и N являются целыми числами , по умолчанию . В документации Фортрана это называется «неявной типизацией». Также доступна явная типизация, позволяющая объявлять любую переменную любого типа.
Различные языки программирования, включая Prolog , Haskell , Ruby и Go, обрабатывают идентификаторы, начинающиеся с заглавной буквы, иначе, чем идентификаторы, начинающиеся с маленькой буквы, практика, связанная с использованием символов.
Строппинг
[ редактировать ]На самом деле это форма ограничения : использование многих языков в Microsoft .NET Common Language Infrastructure (CLI) требует способа использования переменных на другом языке, которые могут быть ключевыми словами на вызывающем языке. Иногда это делается с помощью префиксов. В C# любые имена переменных могут иметь префикс " @
". В основном это используется для разрешения использования имен переменных, которые в противном случае конфликтовали бы с ключевыми словами. [9] То же самое достигается в VB.Net , заключая имя в квадратные скобки, как в [end]
. [10]
" @
Префикс " также можно применять к строковым литералам; см. аффиксы литералов ниже.
Венгерская нотация
[ редактировать ]С сигилами связана венгерская нотация — соглашение об именах переменных, которое определяет тип переменной путем присоединения к имени переменной определенных буквенных префиксов. Однако, в отличие от символов, венгерская нотация не дает компилятору никакой информации; как таковые, явные типы должны быть избыточно указаны для переменных (если не используется язык с выводом типа ). Поскольку большинство стандартных компиляторов не требуют использования префиксов, это допускает их пропуск, а также делает код подверженным путанице из-за случайного ошибочного использования. [11]
Буквальные аффиксы
[ редактировать ]В то время как сигилы применяются к именам (идентификаторам), аналогичные префиксы и суффиксы могут применяться к литералам , особенно целочисленным литералам и строковым литералам , определяя либо то, как литерал должен оцениваться, либо какой он тип данных. Например, 0x10ULL
вычисляет значение 16 как длинное целое число без знака в C++: 0x
префикс указывает шестнадцатеричный формат, а суффикс ULL
указывает на беззнаковый длинный длинный. Точно так же префиксы часто используются для обозначения необработанной строки , например: r"C:\Windows"
в Python, который представляет строку со значением C:\Windows
; как экранированная строка это будет записано как "C:\\Windows"
.
Поскольку это влияет на семантику (значение) литерала, а не на синтаксис или семантику идентификатора (имени), это не является ни обрезкой (синтаксис идентификатора), ни сигилой (семантика идентификатора), но синтаксически похоже.
Java-аннотации
[ редактировать ]Сравните аннотации Java , такие как @Override и @Deprecated.
Путаница
[ редактировать ]В некоторых случаях один и тот же синтаксис может использоваться для разных целей, что может вызвать путаницу. Например, в C# функция " @
Префикс " можно использовать либо для ограничения (чтобы разрешить использование зарезервированных слов в качестве идентификаторов), либо в качестве префикса к литералу (для обозначения необработанной строки ); в этом случае ни одно из этих значений не является символом, поскольку оно влияет на синтаксис идентификаторы или семантика литералов, а не семантика идентификаторов.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Определение сигилы» . Словарь английского языка Коллинза . Проверено 22 мая 2012 г.
- ^ «Переменные Perl 6: Twigils» , Документация Perl 6.
- ^ «Переменные – Сайкорп» . www.Cyc.com . Проверено 31 декабря 2017 г.
- ^ «Константы – Сайкорп» . www.Cyc.com . Проверено 31 декабря 2017 г.
- ^ «Начало работы: сигилы» . Эликсир . Проверено 18 января 2022 г.
- ^ «Обновленное руководство по эксплуатации C-INTERCAL 0.29» . catb.org . Проверено 30 июня 2022 г.
- ^ «Справочник CLC-INTERCAL» . oshaboy.github.io . Проверено 30 июня 2022 г.
- ^ Блэк, Дэвид А. (15 августа 2007 г.). «Методы взрыва, или Опасность, Уилл Рубист!» . Архивировано из оригинала 22 мая 2016 года.
- ^ «Ключевые слова C#» . MSDN . Проверено 23 марта 2011 г.
- ^ "строка (Справочник по C#)" . MSDN . Проверено 23 марта 2011 г.
- ^ Стиль кодирования ядра Linux , Линус Торвальдс.