Simbol (programare) - Symbol (programming)

Un simbol în programarea computerului este un tip de date primitive ale cărui instanțe au o formă unică de citire umană. Simbolurile pot fi utilizate ca identificatori . În unele limbaje de programare , acestea sunt numite atomi . Unicitatea este impusă ținându-le într-un tabel de simboluri . Cea mai obișnuită utilizare a simbolurilor de către programatori este pentru efectuarea reflecției limbajului (în special pentru callback-uri ) și cea mai comună indirect este utilizarea lor pentru a crea legături de obiecte .

În cea mai banală implementare , ele sunt în esență numite numere întregi (de exemplu, tipul enumerat în C).

A sustine

Următoarele limbaje de programare oferă rulare suport pentru simboluri:

limba introduceți numele exemplu literal (e)
ANSI Common Lisp simbol, cuvânt cheie simbol , : cuvinte cheie
Clojure simbol, cuvânt cheie „simbol , : cuvinte cheie
Dart (limbaj de programare) Simbol #sym
Elixir atom, simbol : sim
Erlang atom sym sau „sym”
Julia Simbol : sim
Obiectiv-C SEL @selector (sym)
PICAXE BASIC simbol simbol let nume = variabilă
Prolog atom, simbol sym sau „sym”
Rubin Simbol : sym sau : „sym”
Scala scala.Symbol 'simbol
Sistem simbol sim
Convorbire scurtă Simbol #sym sau # 'sym'
SML / NJ Atom.atom
JavaScript (ES6 și versiuni ulterioare) Simbol Simbol („sym”);
Limbajul Wolfram Simbol Simbol ["sym"] sau sym
K (limbaj de programare) simbol `sym

Lisp

Un simbol în Lisp este unic într-un spațiu de nume (sau pachet în Common Lisp ). Simbolurile pot fi testate pentru egalitate cu funcția EQ. Programele Lisp pot genera noi simboluri în timpul rulării. Când Lisp citește date care conțin simboluri reprezentate textual, se face referință la simbolurile existente. Dacă un simbol este necunoscut, cititorul Lisp creează un simbol nou.

În Common Lisp simbolurile au următoarele atribute: un nume, o valoare, o funcție, o listă de proprietăți și un pachet.

În Common Lisp este de asemenea posibil ca un simbol să nu fie internat într-un pachet. Astfel de simboluri pot fi tipărite, dar când sunt citite, trebuie creat un nou simbol. Deoarece nu este * internat *, simbolul original nu poate fi preluat dintr-un pachet.

În Common Lisp simbolurile pot folosi orice caractere, inclusiv spații albe, cum ar fi spații și linii noi. Dacă un simbol conține un caracter în spațiu alb, trebuie să fie scris ca | acesta este un simbol |. Simbolurile pot fi utilizate ca identificatori pentru orice tip de constructe de programare denumite: variabile, funcții, macrocomenzi, clase, tipuri, etichete de trecere și multe altele. Simbolurile pot fi internate într-un pachet. Simbolurile cuvintelor cheie se autoevaluează și sunt internate în pachetul numit CUVINTE CHEIE.

Exemple

Următoarea este o reprezentare externă simplă a unui simbol Common Lisp :

this-is-a-symbol

Simbolurile pot conține spațiu alb (și toate celelalte caractere):

|This is a symbol with whitespace|

În Common Lisp, simbolurile cu un punct principal în reprezentările lor tipărite sunt simboluri de cuvinte cheie . Acestea sunt internate în pachetul de cuvinte cheie.

:keyword-symbol

O reprezentare tipărită a unui simbol poate include un nume de pachet. Două puncte sunt scrise între numele pachetului și numele simbolului.

package-name::symbol-name

Pachetele pot exporta simboluri. Apoi, se scrie un singur punct între numele pachetului și numele simbolului.

package:exported-symbol

Simbolurile, care nu sunt internate într-un pachet, pot fi, de asemenea, create și au o notație:

#:uninterned-symbol

Prolog

În Prolog , simbolurile (sau atomii) sunt primele tipuri de date primitive, asemănătoare numerelor. Notarea exactă poate diferi în diferite dialecte ale Prologului. Cu toate acestea, este întotdeauna destul de simplu (nu sunt necesare citate sau caractere speciale de început).

Spre deosebire de alte limbi, este posibil să dai simbolurilor un anumit sens prin crearea unor fapte și / sau reguli ale Prologului.

Exemple

Următorul exemplu demonstrează două fapte (descrierea a ceea ce este tatăl ) și o regulă (descrierea sensului de frate ). Aceste trei propoziții folosesc simboluri (tată, zeus, hermes, perseus și frate) și câteva variabile abstracte (X, Y și Z). Relația mamă a fost omisă pentru claritate.

father(zeus, hermes).
father(zeus, perseus).

sibling(X, Y) :- father(Z, X), father(Z, Y).

Rubin

În Ruby , simbolurile pot fi create cu o formă literală sau prin conversia unui șir. Ele pot fi utilizate ca identificator sau ca șir internat. Două simboluri cu același conținut se vor referi întotdeauna la același obiect. Este considerată o bună practică să folosești simbolurile ca chei pentru o matrice asociativă în Ruby.

Exemple

Următorul este un exemplu simplu de simbol literal în Ruby:

my_symbol = :a
my_symbol = :"an identifier"

Șirurile pot fi constrânse în simboluri, invers:

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"

Simbolurile sunt obiecte ale Symbol clasei din 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

Simbolurile sunt utilizate în mod obișnuit pentru a trimite în mod dinamic mesaje către (metode de apel pe) obiecte:

irb(main):007:0> "aoboc".split("o")
=> ["a", "b", "c"]
irb(main):008:0> "aoboc".send(:split, "o") # same result
=> ["a", "b", "c"]

Simboluri ca chei ale unui tablou asociativ:

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"

Convorbire scurtă

În Smalltalk , simbolurile pot fi create cu o formă literală sau prin conversia unui șir. Ele pot fi utilizate ca identificator sau ca șir internat. Două simboluri cu același conținut se vor referi întotdeauna la același obiect. În majoritatea implementărilor Smalltalk, selectoarele (numele metodelor) sunt implementate ca simboluri.

Exemple

Următorul este un exemplu simplu de literal literal în 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 "

Șirurile pot fi constrânse în simboluri, invers:

my_symbol := 'Hello, world!' asSymbol " => #'Hello, world!' "
my_string := #hello: asString         " => 'hello:' "

Simbolurile sunt conforme cu symbol protocolul, iar clasa lor este numită Symbol în majoritatea implementărilor:

my_symbol := #hello_world
my_symbol class            " => Symbol "

Simbolurile sunt utilizate în mod obișnuit pentru a trimite în mod dinamic mesaje către (metode de apel pe) obiecte:

" same as 'foo' at: 2 "
'foo' perform: #at: with: 2 " => $o "

Referințe

  1. ^ a b c Hunt, Dave Thomas; Chad Fowler; Andy (2001). Programare Ruby ghidul programatorilor pragmatici; [include Ruby 1.8] (2. ed., 10. ed. tipărită). Raleigh, NC: Raftul Pragmatic. ISBN   978-0-9745140-5-5 .
  2. ^ Simboluri pe pagina Structuri de date
  3. ^ Cuvinte cheie pe pagina Structuri de date
  4. ^ "Un tur al limbii Dart | Simboluri" . Limbajul de programare Dart . Adus la 17 ianuarie 2021 .
  5. ^ Common Lisp HyperSpec, simbolul clasei de sistem
  6. ^ Common Lisp HyperSpec, pachet clasa de sistem
  7. ^ Peter Norvig : Paradigme ale inteligenței artificiale de programare: Studii de caz în Common Lisp , Morgan Kaufmann, 1991, ISBN   1-55860-191-0 , Web
  8. ^ Bratko, Ivan (2001). Programare Prolog pentru inteligență artificială . Harlow, Anglia; New York: Addison Wesley. ISBN   978-0-201-40375-6 .
  9. ^ a b Kidd, Eric. „13 moduri de a privi un simbol rubin” . Hacks aleatorii . Accesat la 10 iulie 2011 .
  10. ^ "Programarea Ruby: Ghidul programatorului pragmatic" .
  11. ^ "Utilizarea simbolurilor pentru un motiv greșit" . Note gnomice .
  12. ^ „Simbol” . Documentație Ruby . Accesat la 10 iulie 2011 .
  13. ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Standard ANSI Smalltalk.