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
- ^ 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 .
- ^ Simboluri pe pagina Structuri de date
- ^ Cuvinte cheie pe pagina Structuri de date
- ^ "Un tur al limbii Dart | Simboluri" . Limbajul de programare Dart . Adus la 17 ianuarie 2021 .
- ^ Common Lisp HyperSpec, simbolul clasei de sistem
- ^ Common Lisp HyperSpec, pachet clasa de sistem
- ^ Peter Norvig : Paradigme ale inteligenței artificiale de programare: Studii de caz în Common Lisp , Morgan Kaufmann, 1991, ISBN 1-55860-191-0 , Web
- ^ Bratko, Ivan (2001). Programare Prolog pentru inteligență artificială . Harlow, Anglia; New York: Addison Wesley. ISBN 978-0-201-40375-6 .
- ^ a b Kidd, Eric. „13 moduri de a privi un simbol rubin” . Hacks aleatorii . Accesat la 10 iulie 2011 .
- ^ "Programarea Ruby: Ghidul programatorului pragmatic" .
- ^ "Utilizarea simbolurilor pentru un motiv greșit" . Note gnomice .
- ^ „Simbol” . Documentație Ruby . Accesat la 10 iulie 2011 .
- ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Standard ANSI Smalltalk.