Символ в компьютерном программировании является примитивным типом данных , чьи экземпляры имеют уникальное удобочитаемое форму. Символы могут использоваться как идентификаторы . В некоторых языках программирования они называются атомами . [1] Уникальность обеспечивается хранением их в таблице символов . Чаще всего программисты используют символы для отражения языка (особенно для обратных вызовов ), а наиболее распространенным косвенным образом является их использование для создания объектных связей .
В наиболее тривиальной реализации они, по сути, называются целыми числами (например, перечислимый тип в C).
Поддержка [ править ]
Следующие языки программирования обеспечивают поддержку символов во время выполнения :
язык | имя типа | пример литерала (ов) |
---|---|---|
ANSI Common Lisp | символ, ключевое слово | символ , : ключевое слово |
Clojure | символ, [2] ключевое слово [3] | «символ , : ключевое слово |
Дарт (язык программирования) | Символ [4] | #sym |
Эликсир | атом, символ | : sym |
Erlang | атом | сим или сим |
Юля | Символ | : sym |
Цель-C | SEL | @selector (симв.) |
PICAXE BASIC | символ | символ let name = переменная |
Пролог | атом, символ | сим или сим |
Рубин | Символ | : sym или : 'sym' |
Scala | scala.Symbol | 'символ |
Схема | символ | сим |
Болтовня | Символ | #sym или # 'sym' |
SML / NJ | Атом.атом | |
JavaScript (ES6 и новее) | Символ | Символ («симв»); |
Язык Wolfram Language | Символ | Символ ["sym"] или sym |
K (язык программирования) | символ | `сим |
Лисп [ править ]
Символ в Лиспе уникален в пространстве имен (или пакете в Common Lisp ). Символы можно проверить на равенство с функцией EQ. Программы на Лиспе могут генерировать новые символы во время выполнения. Когда Lisp читает данные, содержащие символы, представленные в текстовом виде, делается ссылка на существующие символы. Если символ неизвестен, программа чтения Лиспа создает новый символ.
В Common Lisp символы имеют следующие атрибуты: имя, значение, функцию, список свойств и пакет. [5]
В Common Lisp также возможно, что символ не интернирован в пакете. Такие символы можно напечатать, но при обратном чтении необходимо создать новый символ. Поскольку он не * интернирован *, исходный символ не может быть извлечен из пакета.
В символах Common Lisp могут использоваться любые символы, включая пробелы, такие как пробелы и символы новой строки. Если символ содержит пробельный символ, его нужно записать как | это символ |. Символы могут использоваться в качестве идентификаторов для любых именованных программных конструкций: переменных, функций, макросов, классов, типов, тегов goto и т. Д. Символы могут быть помещены в пакет. [6] Символы ключевых слов являются самооценочными [7] и встроены в пакет с именем KEYWORD.
Примеры [ править ]
Ниже приводится простое внешнее представление символа Common Lisp :
это-это-символ
Символы могут содержать пробелы (и все другие символы):
| Это символ с пробелом |
В Common Lisp символы с начальным двоеточием в их печатном представлении являются ключевыми символами . Они включены в пакет ключевых слов.
: ключевое слово-символ
Печатное представление символа может включать имя пакета. Между названием пакета и названием символа ставятся два двоеточия.
имя-пакета :: имя-символа
Пакеты могут экспортировать символы. Тогда между именем пакета и именем символа ставится только одно двоеточие.
пакет: экспортированный символ
Символы, которые не интернированы в пакете, также могут быть созданы и иметь обозначение:
#: unterned-symbol
Пролог [ править ]
В Прологе символы (или атомы) являются первичными примитивными типами данных, подобными числам. [8] Точные обозначения могут отличаться в разных диалектах Пролога. Однако это всегда довольно просто (никаких кавычек или специальных начальных символов не требуется).
В отличие от других языков, можно придать символам какое-то значение , создав некоторые факты и / или правила Пролога.
Примеры [ править ]
В следующем примере демонстрируются два факта (описывающие, что такое отец ) и одно правило (описывающее значение слова « брат или сестра» ). В этих трех предложениях используются символы (отец, зевс, гермес, персей и брат) и некоторые абстрактные переменные (X, Y и Z). Мать отношения были опущены для ясности.
отец ( Zeus , Гермес ). отец ( зевс , персей ).брат ( X , Y ) : - отец ( Z , X ), отец ( Z , Y ).
Руби [ править ]
В Ruby символы можно создавать в буквальной форме или путем преобразования строки. [1] Они могут использоваться как идентификатор или интернированная строка. [9] Два символа с одинаковым содержанием всегда будут относиться к одному и тому же объекту. [10] Считается лучшей практикой использовать символы в качестве ключей к ассоциативному массиву в Ruby. [9] [11]
Примеры [ править ]
Ниже приводится простой пример символьного литерала в Ruby: [1]
my_symbol = : a my_symbol = : "идентификатор"
Строки можно преобразовать в символы, и наоборот:
irb (main): 001: 0> my_symbol = "Привет, мир!" . intern =>: "Привет, мир!" irb (main): 002: 0> my_symbol = "Привет, мир!" . to_sym =>: "Привет, мир!" irb (main): 003: 0> my_string = : привет . to_s => "привет"
Символы - это объекты Symbol
класса в Ruby: [12]
irb (main): 004: 0> my_symbol = : hello_world =>: hello_world irb (main): 005: 0> my_symbol . длина => 11 irb (основной): 006: 0> my_symbol . class => Символ
Символы обычно используются для динамической отправки сообщений (вызова методов) объектам:
irb (основной): 007: 0> "aoboc" . split ( "o" ) => ["a", "b", "c"] irb (main): 008: 0> "aoboc" . send ( : split , "o" ) # тот же результат => ["a", "b", "c"]
Символы как ключи ассоциативного массива:
irb (main): 009: 0> my_hash = { a : "apple" , b : "banana" } => {: a => "apple" ,: b => "banana"} irb (main): 010: 0> my_hash [ : a ] => "яблоко" irb (основной): 011: 0> my_hash [ : b ] => "банан"
Smalltalk [ править ]
В Smalltalk символы могут быть созданы в буквальной форме или путем преобразования строки. Их можно использовать как идентификатор или интернированную строку. Два символа с одинаковым содержанием всегда будут относиться к одному и тому же объекту. [13] В большинстве реализаций Smalltalk селекторы (имена методов) реализованы как символы.
Примеры [ править ]
Ниже приводится простой пример символьного литерала в Smalltalk:
my_symbol : = # 'идентификатор' "Символьный литерал" my_symbol : = #a "Технически это литерал селектора. В большинстве реализаций" "селекторы являются символами, поэтому это также символьный литерал"
Строки можно преобразовать в символы, и наоборот:
my_symbol : = 'Привет, мир!' asSymbol "=> # 'Привет, мир!' " my_string : = #hello: asString " => 'hello:' "
Символы соответствуют symbol
протоколу, и их класс вызывается Symbol
в большинстве реализаций:
my_symbol : = #hello_world my_symbol class "=> Symbol"
Символы обычно используются для динамической отправки сообщений (вызова методов) объектам:
"то же, что и 'foo' at: 2" 'foo' выполнить: #at: with: 2 "=> $ o"
Ссылки [ править ]
- ^ a b c Хант, Дэйв Томас; Чад Фаулер; Энди (2001). Programming Ruby - руководство прагматичного программиста; [включает Ruby 1.8] (2-е изд., 10-е изд.). Роли, Северная Каролина: Прагматическая книжная полка. ISBN 978-0-9745140-5-5.
- ^ Символы на странице структур данных
- ^ Ключевые слова на странице о структурах данных
- ^ «Экскурсия по языку Дарт | Символы» . Язык программирования Дарт . Проверено 17 января 2021 года .
- ^ Common Lisp HyperSpec, системный класс Symbol
- ^ Common Lisp HyperSpec, пакет системного класса
- ^ Питер Норвиг : Парадигмы программирования искусственного интеллекта: тематические исследования в Common Lisp , Морган Кауфманн, 1991, ISBN 1-55860-191-0 , Интернет
- ^ Братко, Иван (2001). Программирование на прологе для искусственного интеллекта . Харлоу, Англия; Нью-Йорк: Эддисон Уэсли. ISBN 978-0-201-40375-6.
- ^ а б Кидд, Эрик. «13 способов взглянуть на рубиновый символ» . Случайные взломы . Проверено 10 июля 2011 года .
- ^ "Программирование Ruby: Руководство программиста-прагматика" .
- ^ «Использование символов по неправильной причине» . Гномические заметки .
- ^ «Символ» . Документация по Ruby . Проверено 10 июля 2011 года .
- ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Стандарт ANSI Smalltalk.