# Literal

Ein Literal ist ein spezieller Bestandteil einer formalen Sprache.

## Literale in Programmiersprachen
### Rolle von Literalen in Programmiersprachen

Als Literal (lateinisch littera ‚Buchstabe‘) bezeichnet man in Programmiersprachen eine Zeichenfolge, die zur direkten Darstellung der Werte von Basistypen (z. B. Ganzzahlen, Gleitkommazahlen, Zeichenketten, Funktionen) definiert bzw. zulässig ist.
Man unterscheidet logische (wahr, nicht wahr), numerische und Zeichenliterale. Je nach Programmiersprache gibt es weitere und detailliertere Kategorisierungen für Literale. Damit Literale vom Compiler identifiziert werden können, müssen sie bestimmten syntaktischen Regeln genügen, z. B. (sprachenabhängig und in bestimmten Fällen) in Anführungszeichen eingeschlossen sein.
Literale als Teil von Befehlen werden auch als literale Konstanten oder nicht benannte Konstanten bezeichnet, da sowohl Literale als auch Konstanten zur Laufzeit des Programms unveränderlich sind. Literale dürfen in Zuweisungsoperatoren nur als Sende-Ausdruck (i. d. R. rechtsseitig; 'Zeilen = 60'), als Argument einer Funktion oder als der Wert einer Konstante codiert werden.
In der funktionalen Programmierung können auch Funktionen als Literale geschrieben werden. Diese werden als anonyme Funktionen oder Lambda-Funktionen bezeichnet.
Ähnlich dem Literalbegriff kennen manche Programmiersprachen sog. „figurative Konstanten“. Dies sind (z. B. in Cobol) gem. „Cobol-Worte [in unterschiedlichen Schreibweisen, z. B. in Pluralform] für die vom Compiler bestimmte Werte erzeugt werden“: Zero, Space, High-Value und Low-Value, Quote und 'ALL Literal'.
Als Aspekt des Programmierstils wird zum Teil empfohlen, im Befehlsteil des Programmcodes möglichst keine Literale, sondern ersatzweise Konstanten zu verwenden, die im Quelltext beliebig oft angesprochen werden können – anstatt immer das gleiche Literal zu verwenden. Diese Vorschrift soll zu höherer Transparenz und Wartungsfreundlichkeit führen.
In JavaScript können auch strukturierte Daten wie Arrays und Objekte als Literale geschrieben werden, in Tcl dagegen Listen und Dictionaries.

### Beispiele für Literale

| Wahrheitswerte: | true, false | (in vielen Sprachen als reservierte Wörter) |
| Ganzzahlen: | 1200, +1200, −12 | (nur Ziffern und + oder −) |
| Gleitkommazahlen: | 12.34, −12e34, 12.e-34 | (Ziffern, Vorzeichen, Punkt, e) |
| Einzelnes Zeichen: | 'a' | (beliebiges einzelnes Zeichen in Anführungszeichen) |
| Zeichenketten: | "ABCD(12)$ ist eine Zeichenkette" | (mehrere Zeichen in doppelten Anführungszeichen) |
| JSON: | {"mitarbeiter":[ {"vName":"Jonas", "fName":"Dörfner"}, {"vName":"Anna Lena", "fName":"Schmitz"}, {"vName":"Peter", "fName":"Meier"} ] } | (ein Objekt, das ein Array mit mehreren Objekten enthält) |
| Dictionary in Tcl: | {mitarbeiter { {vName Jonas fName Dörfner} {vName {Anna Lena} fName Schmitz} {vName Peter fName Meier} } | (inhaltlich identisch mit dem JSON-Beispiel darüber, statt des Arrays ist es in Tcl eine Liste mit 3 Elementen) |
| Liste in Tcl: | {{rote Grütze} gelb {grüne Soße}} | (drei Listenelemente) |
| S-Expressions (symbolische Ausdrücke) in Lisp: | (quote (mitarbeiter (:vname "Jonas" :fname "Dörfner") (:vname "Anna Lena" :fname "Schmitz") (:vname "Peter" :fname "Meier"))) | verschachtelte Listen mit Symbolen und Strings, quotiert als Literal |
| Funktionsliteral in Haskell: | (\x -> 2*x) | verdoppelt eine Zahl |

## Literale in der mathematischen Logik

In der mathematischen Logik ist ein Literal eine atomare Aussage (Atom) oder die Negation einer atomaren Aussage. Man hat daher positive Literale und negative Literale. Eine disjunktive Verknüpfung von Literalen bezeichnet man als Disjunktionsterm oder als Klausel. Eine rein konjunktive Verknüpfung von Literalen bezeichnet man als Konjunktionsterm oder als Monom.