Was bedeutet das Wort "wörtlich"?


79

Was bedeutet das Wort "Literal", wenn es in Kontexten wie Literalzeichenfolgen und Literalwerten verwendet wird?

Was ist der Unterschied zwischen einem Literalwert und einem Wert?

Antworten:


116

Ein Literal ist "jede Notation zur Darstellung eines Wertes im Quellcode" ( Wikipedia )

(Vergleichen Sie dies mit Bezeichnern , die sich auf einen Wert im Speicher beziehen .)

Beispiele:

  • "hey" (ein Faden)
  • false (ein Boolescher Wert)
  • 3.14 (eine reelle Zahl)
  • [1,2,3] (eine Liste von Zahlen)
  • (x) => x*x (eine Funktion)
  • /^1?$|^(11+?)\1+$/ (ein regulärer Ausdruck)

Einige Dinge, die keine Literale sind:

  • std::cout (eine Kennung)
  • foo = 0; (ein Statement)
  • 1+2 (Ein Ausdruck)

Leider weiß ich nicht, wie es gelingt, die Primheit zu bestimmen. Ich habe es gerade von irgendwoher kopiert, weil es cool aussah

1
Ich wusste nicht einmal, dass es so ist: Ich dachte nur, dass es eine gute Idee ist, überhaupt ein Regex-Literal zu zeigen.
Joel Coehoorn

4
"Jede Notation für die Darstellung eines Wertes im Quellcode" Wikipedia-Definitionen lesen sich heutzutage wie Referenzen für Experten, die bereits wissen, anstatt einem pädagogischen Zweck zu dienen - was wird oben in "Erklären, wie ich fünf bin" übersetzt?
BKSpurgeon

2
@BKSpurgeon Grundsätzlich Code, der einen Wert in einem Programm darstellt, anstatt eine besondere Bedeutung für die Ausführung des Programms zu haben. Zum Beispiel: bedeutet 15 wörtlich fünfzehn im Programm vs, +was die besondere Bedeutung von "zwei Dinge addieren" hat. Sie würden +das Pluszeichen selbst nicht als Repräsentation behandeln, da es kein Literal ist.
avid_useR

81

Ein Literal ist ein Wert, der direkt in Ihrer Quelle fest codiert wurde.

Zum Beispiel:

string x = "This is a literal";
int y = 2; // so is 2, but not y
int z = y + 4; // y and z are not literals, but 4 is
int a = 1 + 2; // 1 + 2 is not a literal (it is an expression), but 1 and 2 considered separately are literals

Einige Literale können eine spezielle Syntax haben, sodass Sie wissen, um welchen Typ es sich bei dem Literal handelt:

//The 'M' in 10000000M means this is a decimal value, rather than int or double.
var accountBalance = 10000000M; 

Was sie von Variablen oder Ressourcen unterscheidet, ist, dass der Compiler sie als Konstanten behandeln oder bestimmte Optimierungen mit Code durchführen kann, in dem sie verwendet werden, da sicher ist, dass sie sich nicht ändern.


11
Ich mag die Art und Weise, wie Sie es gerade erklärt haben, anstatt zu zeigen, wie viel Sie wissen, und damit Neulinge zu verwirren. Wir brauchen mehr Leute wie Sie.
Herr Smee

2
Einfach und überzeugend. Vielen Dank
Johnny

16

Ein Literal ist eine Zuordnung zu einem expliziten Wert, z

int i = 4;  // i is assigned the literal value of '4'
int j = i   // j is assigned the value of i.  Since i is a variable,  
            //it can change and is not a 'literal'

BEARBEITEN: Wie bereits erwähnt, hat die Zuweisung selbst nichts mit der Definition eines Literal zu tun. In meinem Beispiel habe ich die Zuweisung verwendet, aber ein Literal kann auch an eine Methode usw. übergeben werden.


yep: Literale haben nichts mit Aufgabe zu tun;)

Das stimmt, ich hätte klarstellen sollen, dass ich die Aufgabe verwendet habe, um zu demonstrieren, was ein Literal ist.
Ed S.

12

Ein Literal ist, wenn Sie den Wert in den Quellcode aufnehmen (im Gegensatz zum Verweisen auf eine Variable oder eine Konstante). Zum Beispiel:

int result = a + 5; // a is a variable with a value, 5 is a literal

string name = "Jeff Atwood"; // name is a variable initialized
                             // with the string literal, "Jeff Atwood"

int[] array = new int[] {1, 2, 3}; // C# has array literals (this is actually three
                                   // int literals within an array literal)

Wenn das Literal eine bestimmte Größe darstellt, wie z. B. eine physikalische Konstante, ist es besser, ihm einen Namen zu geben, als überall dort, wo Sie es benötigen, dasselbe Literal zu schreiben. Auf diese Weise wissen Sie beim Lesen des Quellcodes, was die Zahl bedeutet , was normalerweise wichtiger ist als ihr Wert (der sich sowieso ändern kann).

const int maxUsers = 100;
const double gravitationalAcceleration = 9.8;

Im Allgemeinen sind die einzigen numerischen Literale, die ich verwende (außer zum Initialisieren von Konstanten wie oben), 0 oder 1 und manchmal 2, wenn ich jedes andere Element in einer Schleife überspringe. Wenn die Bedeutung der Zahl wichtiger ist als ihr tatsächlicher Wert (normalerweise), ist es besser, sie zu benennen.


6

Ein Literalwert ist ein Wert, aber ein Wert kann auch in einer Variablen gespeichert werden. In der Erklärung

string str = "string literal";

Es gibt eine Stringvariable (str) und ein Stringliteral. Nachdem die Anweisung ausgeführt wurde, haben beide den gleichen Wert.

Beachten Sie, dass in vielen Sprachen die Variable und der Literalwert nicht unbedingt vom selben Typ sein müssen. Zum Beispiel:

int a = 1.0;

Der obige Literalwert ist ein Gleitkommatyp. Der Wert wird vom Compiler gezwungen, in die Variable int zu passen.

In einem anderen Beispiel ist in der ersten Zeile des C ++ - Codes oben der Typ eines Zeichenfolgenliteral überhaupt nicht der Bibliothekstyp string. Um die Abwärtskompatibilität mit C aufrechtzuerhalten, sind Zeichenfolgenliterale in C ++ Zeichenarrays.


5

Kurzes Beispiel:

int my_int_var = 723;

723 - Dieser Satz von Zeichen bezieht sich auf einen wörtlichen ganzzahligen Wert.

my_int_var - Dieser Zeichensatz bezieht sich auf einen variablen ganzzahligen Wert.


3

Ein Literal ist, wenn Sie es in den Code einfügen. Ein String-Literal ist also

string s = "SomeText";

Dies steht im Gegensatz zum Erstellen der Zeichenfolge oder zum Aufnehmen als Parameter.


2

Wenn jemand das Wort Literal verwendet, bedeutet dies im Allgemeinen, dass der Wert aus dem Code (Text) entzifferbar ist, wie in vielen Beispielen in anderen Beiträgen gezeigt.

Eine weitere häufige Verwendung sind Werte, die in Assembly in unmittelbare Werte konvertiert werden. Dies sind Werte, die direkt in den Maschinenbefehl eingefügt werden, anstatt Registerlasten zu erfordern.



1

Ich habe String-Literale gehört, die beiläufig verwendet werden, um auf das zu verweisen, was die C # -Spezifikation tatsächlich als wörtliche String-Literale bezeichnet. Ein reguläres Zeichenfolgenliteral ermöglicht das Escapezeichen bestimmter Zeichen (mit dem Präfix a), z. B. \ t für eine Registerkarte. Einem wörtlichen Zeichenfolgenliteral wird @ vorangestellt und wörtlich verarbeitet. \ Hat keine besondere Bedeutung.

//regular
string regular = "\thello world";
//verbatim
string verbatim = @"C:\";
//the regular equivalent of this would be "C:\\"

0

Literale sind Kurzschreibweise für Werte in bestimmten Typen, die die Sprache für so wichtig oder grundlegend hält, dass sie nur für sie Syntaxzucker enthält.

Beispiel für Typen, deren Werte häufig durch Literale dargestellt werden:

Boolean = { true, false }
Integer = { ..., -2, -1, 0, 1, 2, ... }
Character = { 'a', 'b', ... }
String = { "hello", "world", ... }

Einige Sprachen haben Literale sogar für Funktionstypen:

Integer -> Integer = { (x: Integer) => x + 2), (x: Integer) => x/2, ...}

Ein Beispiel für Werte, die normalerweise nicht mit Literalen dargestellt werden, sind Werte von Klassentypen:

Car(brand: String, seats: Integer) = { Car("BMW", 5), Car("Ferrari", 2), ...}

Hier wird der Wert Car("BMW", 5)im Typ Carzwar mit einer Folge von Symbolen eindeutig bezeichnet, der Wert wird jedoch nicht mit einem dedizierten Kurzliteral dargestellt, sondern es werden allgemeine (ausführliche) fiktive Mechanismen zum Bezeichnen von Werten eines beliebigen Klassentyps verwendet.

Der Begriff Literal ist gleichbedeutend mit dem Begriff Wert , Instanz , konstant , Mitglied und Element eines Typs, sondern trägt ein bisschen mehr Sinn, der uns sagt , es eine Abkürzung ist es aufzuschreiben.

Ich denke gerne an Literale als ägyptische Hieroglyphen, anstatt Zeichen aus einem Alphabet aneinander zu reihen, um ein Konzept auszudrücken.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.