stringtranslate.com

Сигил (компьютерное программирование)

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

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

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

Использование сигилов было популяризировано языком программирования BASIC . Наиболее известным примером сигила в BASIC является знак доллара (" $"), добавляемый к именам всех строк . Следовательно, программисты за пределами Америки склонны [ неопределенно ] произносить $как "string" вместо "dollar". [ необходима цитата ] Многие диалекты BASIC используют другие сигилы (например, " %") для обозначения целых чисел и чисел с плавающей точкой и их точности, а иногда и других типов.

Ларри Уолл перенял использование сигилов из сценариев оболочки для своего языка программирования Perl . [ требуется ссылка ] В Perl сигилы не определяют мелкозернистые типы данных, такие как строки и целые числа, а более общие категории скаляров (с использованием префикса " $"), массивов (с использованием " @"), хэшей (с использованием " %") и подпрограмм (с использованием " &"). Raku также использует вторичные сигилы, или твигилы , [2] для указания области действия переменных. Известные примеры твигилов в Raku включают " ^" ( вставка ), используемую с самообъявленными формальными параметрами ("переменными-заполнителями"), и " .", используемую с аксессорами атрибутов объектов (т. е. переменными экземпляра).

Использование сигилов в некоторых языках

В CLIPS скалярные переменные имеют префикс " ?", в то время как многополевые переменные (например, одноуровневый список) имеют префикс " $?".

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

В CycL переменные имеют префикс " ?". [3] Аналогично, имена констант имеют префикс " #$" (произносится как "хэш-доллар"). [4]

В Elixir сигилы предоставляются с помощью ~символа " ", за которым следует буква для обозначения типа сигила, а затем разделители. Например, ~r(foo)является регулярным выражением "foo". Другие сигилы включают ~sдля строк и ~Dдля дат. Программисты также могут создавать свои собственные сигилы. [5]

В эзотерическом INTERCAL переменные представляют собой 16-битный целочисленный идентификатор с префиксом " ." (называемым "spot") для 16-битных значений, " :" (называемым "twospot") для 32-битных значений, " ," ("tail") для массивов 16-битных значений и " ;" ("hybrid") для массивов 32-битных значений. [6] Более поздний CLC-Intercal добавил " @" ("whirlpool") для переменной, которая не может содержать значения (используется для классов ) и " _", используемый для хранения измененного компилятора . [7]

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

В скрипте mIRC идентификаторы имеют $сигил " ", в то время как все переменные имеют %префикс " " (независимо от того, являются ли переменные локальными или глобальными или типом данных). Двоичные переменные имеют префикс " &".

В языке программирования MUMPS$ " " предшествует именам внутренних функций и "именам специальных переменных" (встроенные переменные для доступа к состоянию выполнения). " $Z" предшествует нестандартным именам внутренних функций. " $$" предшествует именам внешних функций. Процедуры (используемые для процедур, подпрограмм, функций) и глобальные переменные (хранилище базы данных) имеют префикс в виде вставки (^). На последнее поддерево глобальных переменных можно ссылаться косвенно с помощью вставки и последнего нижнего индекса; это называется "голой ссылкой". Общесистемные процедуры и глобальные переменные (хранящиеся в определенных общих базах данных)) имеют префикс в виде ^%; они называются "процентными процедурами" и "процентными глобальными переменными".

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

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

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

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 , как заметно по тому факту, что знак доллара опускается при назначении переменной.

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

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

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

Правка

На самом деле, это форма стропинга , использование многих языков в .NET Common Language Infrastructure (CLI) Microsoft требует способа использования переменных на другом языке, которые могут быть ключевыми словами в вызывающем языке. Иногда это делается с помощью префиксов. В 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# префикс " @" может использоваться либо для стропинга (чтобы разрешить использовать зарезервированные слова в качестве идентификаторов), либо как префикс к литералу (чтобы указать на необработанную строку ); в этом случае ни одно из этих применений не является сигилом, поскольку влияет на синтаксис идентификаторов или семантику литералов, а не на семантику идентификаторов.

Смотрите также

Ссылки

  1. ^ "Определение сигила". Collins English Dictionary . Получено 22 мая 2012 г.
  2. ^ «Переменные Perl 6:Twigils», Документация Perl 6.
  3. ^ "Переменные – Cycorp". www.Cyc.com . Получено 31 декабря 2017 г. .
  4. ^ "Constants – Cycorp". www.Cyc.com . Получено 31 декабря 2017 г. .
  5. ^ "Getting Started: Sigils". Elixir . Получено 18 января 2022 г. .
  6. ^ "C-INTERCAL 0.29 Revamped Instruction Manual". catb.org . Получено 2022-06-30 .
  7. ^ "CLC-INTERCAL Reference". oshaboy.github.io . Получено 2022-06-30 .
  8. Блэк, Дэвид А. (15 августа 2007 г.). «Методы взрыва; или, Опасность, Уилл Рубист!». Архивировано из оригинала 22 мая 2016 г.
  9. ^ "C# keywords". MSDN . Получено 2011-03-23 ​​.
  10. ^ "string (Справочник по C#)". MSDN . Получено 2011-03-23 ​​.
  11. ^ Стиль кодирования ядра Linux, Линус Торвальдс