2009-01-27 18 views
59

Was bedeutet das Wort "literal", wenn es im Kontext verwendet wird, wie beispielsweise Literalstrings und Literalwerte?Was bedeutet das Wort "wörtlich"?

Was ist der Unterschied zwischen einem Literalwert und einem Wert?

Antwort

83

Ein Literal "jede Notation für darstellt ein Wert innerhalb Quellcode" (wikipedia)

(vergleiche dies mit Identifikatoren, die auf einen Wert im Speicher verweisen.)

Beispiele:

  • "hey" (a string)
  • false (a boolean)
  • 3.14 (eine reelle Zahl)
  • [1,2,3] (eine Liste von Zahlen)
  • (x) => x*x (eine Funktion)
  • /^1?$|^(11+?)\1+$/ (ein Regexp)

einige Dinge, die nicht Literale sind:

  • std::cout (eine Kennung)
  • foo = 0; (Erklärung)
  • 1+2 (Ausdruck)
+3

upvote für die Regex Literal –

+0

Leider weiß ich nicht, wie es gelingt, die Primzahl zu bestimmen. Ich habe es einfach irgendwo kopiert, weil es cool aussah. –

+1

Ich wusste nicht einmal, dass es das ist, was es getan hat: Ich dachte nur, es wäre eine gute Idee, ein Regex-Literal zu zeigen. –

14

Ein Literal ist eine Zuordnung zu einem expliziten Wert, wie

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' 

EDIT: Wie erwähnt, Zuordnung selbst nichts mit der Definition eines wörtlichen zu tun, war ich in meinem Beispiel mit Zuordnung, aber ein Literal kann auch in eine Methode usw. übergeben werden.

+0

hehe, hat jemand diesen ??? –

+0

yep: Literale haben nichts mit Zuweisung zu tun;) –

+0

Das stimmt, ich hätte die Tatsache klären müssen, dass ich eine Zuweisung verwendet habe, um zu demonstrieren, was ein Literal ist. –

3

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

string s = "SomeText"; 

Dies im Gegensatz ist die Zeichenfolge zu bauen, oder es als Parameter nehmen.

64

Ein Literal ist ein Wert, der direkt in Ihre Quelle 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 eine spezielle Syntax haben kann, so wissen Sie, was die wörtliche Typ ist:

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

Was unterscheidet sie von Variablen oder Ressourcen, dass der Compiler Sie können sie als Konstanten behandeln oder bestimmte Optimierungen mit dem Code ausführen, an dem sie verwendet werden, da sie sicher sind, dass sie sich nicht ändern.

+5

Warum wurde das abgelehnt? –

+6

Ich liebe die Art und Weise, wie Sie es gerade erklärt haben, anstatt zu versuchen, zu zeigen, wie viel Sie wissen, und dadurch Neulinge verwirren. Wir brauchen mehr Leute wie dich. –

+1

Einfach und überzeugend. Danke – Johnny

4

Schnell Beispiel:

int my_int_var = 723;

723 - Dieser Zeichensatz bezieht sich auf einen Ganzzahlwert Literal.

my_int_var - Dieser Zeichensatz bezieht sich auf eine Variable Integer-Wert.

6

Ein Literalwert ist ein Wert, aber ein Wert könnte auch in einem gespeichert werden Variable. In der Anweisung

string str = "string literal"; 

gibt es eine String-Variable (str) und ein String-Literal. 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 Fließkommatyp. Der Wert wird vom Compiler gezwungen, in die int-Variable zu passen.

Für ein anderes Beispiel, in der ersten Zeile von C++ - Code oben ist der Typ eines String-Literals überhaupt nicht der Bibliothekstyp string überhaupt. Um die Rückwärtskompatibilität mit C aufrechtzuerhalten, sind Zeichenfolgenliterale in C++ Zeichenarrays.

1

Ich habe String-Literale zufällig verwendet, um auf das zu beziehen, was die C# specification tatsächlich als verbatim String-Literale bezeichnet. Ein reguläres Zeichenfolgenliteral ermöglicht das Entkommen bestimmter Zeichen (mit dem Präfix a), wie zB \ t für eine Registerkarte. Ein wörtliches Zeichenfolgenliteral wird von @ 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:\\" 
9

Ein Literal ist, wenn Sie den Wert in den Quellcode einschließen (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 repräsentiert die wörtliche eine gewisse Menge, wie eine physikalische Konstante, es ist besser, es man es braucht einen Namen zu geben, anstatt die gleiche wörtliche überall zu schreiben. Auf diese Weise wissen Sie, wenn Sie den Quellcode lesen, was die Zahl bedeutet, die normalerweise wichtiger ist als ihr Wert (der sich sowieso ändern könnte).

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

Im Allgemeinen sind die einzigen Zahlenliterale ich (neben Konstanten initialisiert werden wie oben) 0 oder 1 sind, und manchmal 2, wenn ich in einer Schleife jedes andere Element Überspringen bin. Wenn die Bedeutung der Zahl ist wichtiger als ihre tatsächliche Wert (es ist in der Regel), ist es besser, um es zu nennen.

2

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

Eine andere häufige Verwendung ist für Werte, die in Assembly in unmittelbare Werte konvertiert werden. Dies sind Werte, die direkt in den Maschinenbefehl eingefügt werden und keine Registerlasten erfordern.

11

Bei der Programmierung wird ein Wert genau so geschrieben, wie er interpretiert werden soll. Im Gegensatz dazu ist eine Variable ein Name, der während der Ausführung des Programms verschiedene Werte darstellen kann. Und eine Konstante ist ein Name, der in einem Programm den gleichen Wert darstellt. Aber ein Literal ist kein Name - es ist der Wert selbst.

Ein Literal kann eine Zahl, ein Zeichen oder eine Zeichenfolge sein. Zum Beispiel in dem Ausdruck,

x = 3

x ist eine Variable, und 3 ist ein Literal.

1

Ein Literal ist "Quellcode-Darstellung von Daten".