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

  1. ^ 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 .
  2. ^ Symbole auf der Seite Datenstrukturen
  3. ^ Schlüsselwörter auf der Seite Datenstrukturen
  4. ^ "Eine Tour durch die Dartsprache | Symbole" . Dart-Programmiersprache . Abgerufen am 17. Januar 2021 .
  5. ^ Common Lisp HyperSpec, Systemklasse Symbol
  6. ^ Common Lisp HyperSpec, Systemklassenpaket
  7. ^ Peter Norvig : Paradigmen der Programmierung künstlicher Intelligenz: Fallstudien in Common Lisp , Morgan Kaufmann, 1991, ISBN   1-55860-191-0 , Web
  8. ^ Bratko, Ivan (2001). Prologprogrammierung für künstliche Intelligenz . Harlow, England; New York: Addison Wesley. ISBN   978-0-201-40375-6 .
  9. ^ a b Scherz, Eric. "13 Betrachtungsweisen eines Rubinsymbols" . Zufällige Hacks . Abgerufen am 10. Juli 2011 .
  10. ^ "Programmieren von Ruby: The Pragmatic Programmer's Guide" .
  11. ^ "Verwenden von Symbolen aus dem falschen Grund" . Gnomische Notizen .
  12. ^ "Symbol" . Ruby-Dokumentation . Abgerufen am 10. Juli 2011 .
  13. ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf ANSI Smalltalk-Standard.