Símbolo (programação) - Symbol (programming)
Um símbolo em programação de computador é um tipo de dado primitivo cujas instâncias têm uma forma única legível por humanos. Os símbolos podem ser usados como identificadores . Em algumas linguagens de programação , eles são chamados de átomos . A exclusividade é reforçada mantendo-os em uma tabela de símbolos . O uso mais comum de símbolos por programadores é para realizar reflexão de linguagem (particularmente para retornos de chamada ), e mais comum indiretamente é seu uso para criar ligações de objetos .
Na implementação mais trivial , eles são essencialmente denominados inteiros (por exemplo, o tipo enumerado em C).
Apoio, suporte
As seguintes linguagens de programação fornecem suporte de tempo de execução para símbolos:
língua | tipo de nome (s) | exemplo de literal (s) |
---|---|---|
ANSI Common Lisp | símbolo, palavra-chave | símbolo , : palavra-chave |
Clojure | símbolo, palavra-chave | símbolo ' , : palavra-chave |
Dart (linguagem de programação) | Símbolo | #sym |
Elixir | átomo, símbolo | : sym |
Erlang | átomo | sym ou 'sym' |
Julia | Símbolo | : sym |
Objective-C | SEL | @selector (sym) |
PICAXE BASIC | símbolo | símbolo deixe nome = variável |
Prolog | átomo, símbolo | sym ou 'sym' |
Rubi | Símbolo | : sym ou : 'sym' |
Scala | scala.Symbol | 'símbolo |
Esquema | símbolo | sym |
Conversa fiada | Símbolo | #sym ou # 'sym' |
SML / NJ | Atom.atom | |
JavaScript (ES6 e posterior) | Símbolo | Símbolo ("sym"); |
Wolfram Language | Símbolo | Símbolo ["sym"] ou sym |
K (linguagem de programação) | símbolo | `sym |
Lisp
Um símbolo em Lisp é único em um namespace (ou pacote em Common Lisp ). Os símbolos podem ser testados quanto à igualdade com a função EQ. Os programas Lisp podem gerar novos símbolos em tempo de execução. Quando Lisp lê dados que contêm símbolos representados textualmente, os símbolos existentes são referenciados. Se um símbolo for desconhecido, o leitor Lisp cria um novo símbolo.
Em Common Lisp os símbolos têm os seguintes atributos: um nome, um valor, uma função, uma lista de propriedades e um pacote.
No Common Lisp também é possível que um símbolo não esteja internado em um pacote. Esses símbolos podem ser impressos, mas quando lidos, um novo símbolo precisa ser criado. Uma vez que não está * internado *, o símbolo original não pode ser recuperado de um pacote.
No Common Lisp, os símbolos podem usar quaisquer caracteres, incluindo espaços em branco, como espaços e novas linhas. Se um símbolo contém um caractere de espaço em branco, ele precisa ser escrito como | este é um símbolo |. Os símbolos podem ser usados como identificadores para qualquer tipo de construção de programação nomeada: variáveis, funções, macros, classes, tipos, tags goto e muito mais. Os símbolos podem ser internados em um pacote. Os símbolos de palavra-chave são autoavaliados e internos no pacote denominado KEYWORD.
Exemplos
A seguir está uma representação externa simples de um símbolo Common Lisp :
this-is-a-symbol
Os símbolos podem conter espaços em branco (e todos os outros caracteres):
|This is a symbol with whitespace|
Em Common Lisp, os símbolos com dois pontos à esquerda em suas representações impressas são símbolos de palavras-chave . Eles estão internados no pacote de palavras-chave.
:keyword-symbol
Uma representação impressa de um símbolo pode incluir um nome de pacote. Dois dois pontos são escritos entre o nome do pacote e o nome do símbolo.
package-name::symbol-name
Os pacotes podem exportar símbolos. Então, apenas uma vírgula é escrita entre o nome do pacote e o nome do símbolo.
package:exported-symbol
Símbolos, que não estão internados em um pacote, também podem ser criados e ter uma notação:
#:uninterned-symbol
Prolog
No Prolog , os símbolos (ou átomos) são os tipos de dados primitivos primários, semelhantes aos números. A notação exata pode diferir nos diferentes dialetos do Prolog. No entanto, é sempre muito simples (não são necessárias citações ou caracteres iniciais especiais).
Ao contrário de outras linguagens, é possível dar algum significado aos símbolos criando alguns fatos e / ou regras do Prolog.
Exemplos
O exemplo a seguir demonstra dois fatos (descrevendo o que é pai ) e uma regra (descrevendo o significado de irmão ). Essas três frases usam símbolos (pai, zeus, hermes, perseus e irmão) e algumas variáveis abstratas (X, Y e Z). O relacionamento com a mãe foi omitido para maior clareza.
father(zeus, hermes).
father(zeus, perseus).
sibling(X, Y) :- father(Z, X), father(Z, Y).
Rubi
Em Ruby , os símbolos podem ser criados com a forma literal ou convertendo uma string. Eles podem ser usados como um identificador ou uma string interna. Dois símbolos com o mesmo conteúdo sempre farão referência ao mesmo objeto. É considerada uma prática recomendada usar símbolos como chaves para um array associativo em Ruby.
Exemplos
O seguinte é um exemplo simples de um literal de símbolo em Ruby:
my_symbol = :a
my_symbol = :"an identifier"
Strings podem ser transformados em símbolos, vice-versa:
irb(main):001:0> my_symbol = "Hello, world!".intern
=> :"Hello, world!"
irb(main):002:0> my_symbol = "Hello, world!".to_sym
=> :"Hello, world!"
irb(main):003:0> my_string = :hello.to_s
=> "hello"
Símbolos são objetos da Symbol
classe em Ruby:
irb(main):004:0> my_symbol = :hello_world
=> :hello_world
irb(main):005:0> my_symbol.length
=> 11
irb(main):006:0> my_symbol.class
=> Symbol
Os símbolos são comumente usados para enviar mensagens dinamicamente para (métodos de chamada em) objetos:
irb(main):007:0> "aoboc".split("o")
=> ["a", "b", "c"]
irb(main):008:0> "aoboc".send(:split, "o") # same result
=> ["a", "b", "c"]
Símbolos como chaves de uma matriz associativa:
irb(main):009:0> my_hash = { a: "apple", b: "banana" }
=> {:a=>"apple", :b=>"banana"}
irb(main):010:0> my_hash[:a]
=> "apple"
irb(main):011:0> my_hash[:b]
=> "banana"
Conversa fiada
Em Smalltalk , os símbolos podem ser criados com uma forma literal ou convertendo uma string. Eles podem ser usados como um identificador ou uma string interna. Dois símbolos com o mesmo conteúdo sempre farão referência ao mesmo objeto. Na maioria das implementações Smalltalk, os seletores (nomes de métodos) são implementados como símbolos.
Exemplos
A seguir está um exemplo simples de um literal de símbolo em Smalltalk:
my_symbol := #'an identifier' " Symbol literal "
my_symbol := #a " Technically, this is a selector literal. In most implementations, "
" selectors are symbols, so this is also a symbol literal "
Strings podem ser transformados em símbolos, vice-versa:
my_symbol := 'Hello, world!' asSymbol " => #'Hello, world!' "
my_string := #hello: asString " => 'hello:' "
Os símbolos estão em conformidade com o symbol
protocolo e sua classe é chamada Symbol
na maioria das implementações:
my_symbol := #hello_world
my_symbol class " => Symbol "
Os símbolos são comumente usados para enviar mensagens dinamicamente para (métodos de chamada em) objetos:
" same as 'foo' at: 2 "
'foo' perform: #at: with: 2 " => $o "
Referências
- ^ a b c Caça, Dave Thomas; Chad Fowler; Andy (2001). Programando Ruby, o guia do programador pragmático; [inclui Ruby 1.8] (2. ed., 10. ed. impressa). Raleigh, NC: The Pragmatic Bookshelf. ISBN 978-0-9745140-5-5 .
- ^ Símbolos na página sobre estruturas de dados
- ^ Palavras - chave na página sobre estruturas de dados
- ^ "Um tour pela linguagem Dart | Símbolos" . Linguagem de programação Dart . Página visitada em 17 de janeiro de 2021 .
- ^ Common Lisp HyperSpec, classe de sistema Symbol
- ^ Common Lisp HyperSpec, classe de sistema Package
- ^ Peter Norvig : Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp , Morgan Kaufmann, 1991, ISBN 1-55860-191-0 , Web
- ^ Bratko, Ivan (2001). Programação Prolog para inteligência artificial . Harlow, Inglaterra; Nova York: Addison Wesley. ISBN 978-0-201-40375-6 .
- ^ a b Kidd, Eric. "13 maneiras de olhar para um símbolo Ruby" . Hacks aleatórios . Retirado em 10 de julho de 2011 .
- ^ "Programming Ruby: The Pragmatic Programmer's Guide" .
- ^ "Usando símbolos para o motivo errado" . Notas gnômicas .
- ^ "Símbolo" . Documentação Ruby . Retirado em 10 de julho de 2011 .
- ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Padrão ANSI Smalltalk.