Symbol (Programmierung) - Symbol (programming)
Ein Symbol in der Computerprogrammierung ist ein primitiver Datentyp, dessen Instanzen eine eindeutige, für Menschen lesbare Form haben. Symbole können als Bezeichner verwendet werden . In einigen Programmiersprachen werden sie Atome genannt . Die Eindeutigkeit wird erzwungen, indem sie in einer Symboltabelle gehalten werden . Die häufigste Verwendung von Symbolen von Programmierern ist zum Durchführen einer Sprachreflexion (insbesondere für Rückrufe ) und gebräuchlichste ist indirekt ihre Verwendung Objekt erstellen Verknüpfungen .
In der trivialsten Implementierung werden sie im Wesentlichen als Ganzzahlen bezeichnet (z. B. der Aufzählungstyp in C).
Unterstützung
Die folgenden Programmiersprachen bieten Laufzeitunterstützung für Symbole:
| Sprache | Typ Name (n) | Beispielliteral (en) |
|---|---|---|
| ANSI Common Lisp | Symbol, Schlüsselwort | Symbol , : Schlüsselwort |
| Clojure | Symbol, Schlüsselwort | 'Symbol , : Schlüsselwort |
| Dart (Programmiersprache) | Symbol | #sym |
| Elixier | Atom, Symbol | : sym |
| Erlang | Atom | sym oder 'sym' |
| Julia | Symbol | : sym |
| Ziel c | SEL | @selector (sym) |
| PICAXE BASIC | Symbol | Symbol let name = variable |
| Prolog | Atom, Symbol | sym oder 'sym' |
| Rubin | Symbol | : sym oder : 'sym' |
| Scala | scala.Symbol | 'Symbol |
| Planen | Symbol | sym |
| Smalltalk | Symbol | #sym oder # 'sym' |
| SML / NJ | Atom.atom | |
| JavaScript (ES6 und höher) | Symbol | Symbol ("sym"); |
| Wolfram Sprache | Symbol | Symbol ["sym"] oder sym |
| K (Programmiersprache) | Symbol | `sym |
Lispeln
Ein Symbol in Lisp ist in einem Namespace (oder einem Paket in Common Lisp ) eindeutig . Symbole können mit der Funktion EQ auf Gleichheit geprüft werden. Lisp-Programme können zur Laufzeit neue Symbole generieren. Wenn Lisp Daten liest, die in Textform dargestellte Symbole enthalten, wird auf vorhandene Symbole verwiesen. Wenn ein Symbol unbekannt ist, erstellt der Lisp-Leser ein neues Symbol.
In Common Lisp haben Symbole die folgenden Attribute: einen Namen, einen Wert, eine Funktion, eine Liste von Eigenschaften und ein Paket.
In Common Lisp ist es auch möglich, dass ein Symbol nicht in einem Paket enthalten ist. Solche Symbole können gedruckt werden, aber beim Zurücklesen muss ein neues Symbol erstellt werden. Da es nicht * interniert * ist, kann das ursprüngliche Symbol nicht aus einem Paket abgerufen werden.
In Common Lisp können Symbole beliebige Zeichen verwenden, einschließlich Leerzeichen, z. B. Leerzeichen und Zeilenumbrüche. Wenn ein Symbol ein Leerzeichen enthält, muss es als | dies ist ein Symbol | geschrieben werden. Symbole können als Bezeichner für alle Arten von benannten Programmierkonstrukten verwendet werden: Variablen, Funktionen, Makros, Klassen, Typen, goto-Tags und mehr. Symbole können in einem Paket interniert werden. Schlüsselwortsymbole sind selbstauswertend und im Paket KEYWORD enthalten.
Beispiele
Das Folgende ist eine einfache externe Darstellung eines Common Lisp- Symbols:
this-is-a-symbol
Symbole können Leerzeichen (und alle anderen Zeichen) enthalten:
|This is a symbol with whitespace|
In Common Lisp sind Symbole mit einem führenden Doppelpunkt in den gedruckten Darstellungen Schlüsselwortsymbole . Diese sind im Schlüsselwortpaket enthalten.
:keyword-symbol
Eine gedruckte Darstellung eines Symbols kann einen Paketnamen enthalten. Zwischen dem Namen des Pakets und dem Namen des Symbols werden zwei Doppelpunkte geschrieben.
package-name::symbol-name
Pakete können Symbole exportieren. Dann wird nur ein Doppelpunkt zwischen dem Namen des Pakets und dem Namen des Symbols geschrieben.
package:exported-symbol
Symbole, die nicht in einem Paket enthalten sind, können ebenfalls erstellt werden und haben eine Notation:
#:uninterned-symbol
Prolog
In Prolog sind Symbole (oder Atome) die primären primitiven Datentypen, ähnlich wie Zahlen. Die genaue Notation kann in verschiedenen Prolog-Dialekten unterschiedlich sein. Es ist jedoch immer recht einfach (es sind keine Anführungszeichen oder speziellen Anfangszeichen erforderlich).
Im Gegensatz zu anderen Sprachen ist es möglich, Symbolen eine Bedeutung zu geben, indem einige Fakten und / oder Regeln von Prolog erstellt werden.
Beispiele
Das folgende Beispiel zeigt zwei Fakten (beschreibt, was Vater ist) und eine Regel (beschreibt die Bedeutung von Geschwister ). Diese drei Sätze verwenden Symbole (Vater, Zeus, Hermes, Perseus und Geschwister) und einige abstrakte Variablen (X, Y und Z). Die Mutter Beziehung wurde aus Gründen der Übersichtlichkeit weggelassen.
father(zeus, hermes).
father(zeus, perseus).
sibling(X, Y) :- father(Z, X), father(Z, Y).
Rubin
In Ruby können Symbole mit einer Literalform oder durch Konvertieren einer Zeichenfolge erstellt werden. Sie können als Bezeichner oder als internierte Zeichenfolge verwendet werden. Zwei Symbole mit demselben Inhalt beziehen sich immer auf dasselbe Objekt. Es wird als bewährte Methode angesehen , Symbole als Schlüssel für ein assoziatives Array in Ruby zu verwenden.
Beispiele
Das Folgende ist ein einfaches Beispiel für ein Symbolliteral in Ruby:
my_symbol = :a
my_symbol = :"an identifier"
Zeichenfolgen können zu Symbolen gezwungen werden, und umgekehrt:
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"
Symbole sind Objekte der Symbol Klasse in 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
Symbole werden häufig verwendet, um Nachrichten dynamisch an (Aufrufmethoden für) Objekte zu senden:
irb(main):007:0> "aoboc".split("o")
=> ["a", "b", "c"]
irb(main):008:0> "aoboc".send(:split, "o") # same result
=> ["a", "b", "c"]
Symbole als Schlüssel eines assoziativen Arrays:
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"
Smalltalk
In Smalltalk können Symbole mit einer Literalform oder durch Konvertieren einer Zeichenfolge erstellt werden. Sie können als Bezeichner oder als internierte Zeichenfolge verwendet werden. Zwei Symbole mit demselben Inhalt beziehen sich immer auf dasselbe Objekt. In den meisten Smalltalk-Implementierungen werden Selektoren (Methodennamen) als Symbole implementiert.
Beispiele
Das Folgende ist ein einfaches Beispiel für ein Symbolliteral in 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 "
Zeichenfolgen können zu Symbolen gezwungen werden, und umgekehrt:
my_symbol := 'Hello, world!' asSymbol " => #'Hello, world!' "
my_string := #hello: asString " => 'hello:' "
Symbole entsprechen dem symbol Protokoll und ihre Klasse wird Symbol in den meisten Implementierungen aufgerufen :
my_symbol := #hello_world
my_symbol class " => Symbol "
Symbole werden häufig verwendet, um Nachrichten dynamisch an (Aufrufmethoden für) Objekte zu senden:
" same as 'foo' at: 2 "
'foo' perform: #at: with: 2 " => $o "
Verweise
- ^ a b c Hunt, Dave Thomas; Chad Fowler; Andy (2001). Programmieren Ruby der pragmatische Programmierleitfaden; [enthält Ruby 1.8] (2. Aufl., 10. Aufl. Aufl.). Raleigh, NC: Das pragmatische Bücherregal. ISBN 978-0-9745140-5-5 .
- ^ Symbole auf der Seite Datenstrukturen
- ^ Schlüsselwörter auf der Seite Datenstrukturen
- ^ "Eine Tour durch die Dartsprache | Symbole" . Dart-Programmiersprache . Abgerufen am 17. Januar 2021 .
- ^ Common Lisp HyperSpec, Systemklasse Symbol
- ^ Common Lisp HyperSpec, Systemklassenpaket
- ^ Peter Norvig : Paradigmen der Programmierung künstlicher Intelligenz: Fallstudien in Common Lisp , Morgan Kaufmann, 1991, ISBN 1-55860-191-0 , Web
- ^ Bratko, Ivan (2001). Prologprogrammierung für künstliche Intelligenz . Harlow, England; New York: Addison Wesley. ISBN 978-0-201-40375-6 .
- ^ a b Scherz, Eric. "13 Betrachtungsweisen eines Rubinsymbols" . Zufällige Hacks . Abgerufen am 10. Juli 2011 .
- ^ "Programmieren von Ruby: The Pragmatic Programmer's Guide" .
- ^ "Verwenden von Symbolen aus dem falschen Grund" . Gnomische Notizen .
- ^ "Symbol" . Ruby-Dokumentation . Abgerufen am 10. Juli 2011 .
- ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf ANSI Smalltalk-Standard.