Co oznacza słowo „dosłowny”, gdy jest używane w kontekście, takim jak ciągi literałów i wartości literalne?
Jaka jest różnica między wartością literalną a wartością?
c#
language-agnostic
terminology
glossary
prodev42
źródło
źródło
15
dosłownie oznacza piętnaście w programie, a+
które ma specjalne znaczenie „dodaj dwie rzeczy do siebie”. Nie traktowałbyś+
jako reprezentującego samego znaku plus, ponieważ nie jest to literał.Literał to wartość, która została zakodowana bezpośrednio w twoim źródle.
Na przykład:
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
Niektóre literały mogą mieć specjalną składnię, dzięki czemu wiesz, jakiego typu jest to literał:
//The 'M' in 10000000M means this is a decimal value, rather than int or double. var accountBalance = 10000000M;
To, co odróżnia je od zmiennych lub zasobów, polega na tym, że kompilator może traktować je jako stałe lub wykonywać pewne optymalizacje z kodem, w którym są używane, ponieważ jest pewne, że się nie zmienią.
źródło
Literał to przypisanie do jawnej wartości, takiej jak
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'
EDYCJA: Jak wskazałem, samo przypisanie nie ma nic wspólnego z definicją literału, w moim przykładzie użyłem przypisania, ale literał można również przekazać do metody itp.
źródło
Literał to umieszczenie wartości w kodzie źródłowym (w przeciwieństwie do odwoływania się do zmiennej lub stałej). Na przykład:
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)
Jeśli literał reprezentuje jakąś wielkość, na przykład stałą fizyczną, lepiej nadać mu nazwę, zamiast pisać ten sam literał wszędzie, gdzie jest to potrzebne. W ten sposób czytając kod źródłowy wiesz, co oznacza liczba , która zwykle jest ważniejsza niż jej wartość (która i tak może się zmienić).
const int maxUsers = 100; const double gravitationalAcceleration = 9.8;
Ogólnie rzecz biorąc, jedynymi literałami numerycznymi, których używam (poza inicjalizacją stałych, jak powyżej), są 0 lub 1, a czasami 2, jeśli pomijam każdy inny element w pętli. Jeśli znaczenie liczby jest ważniejsze niż jej rzeczywista wartość (zwykle jest), lepiej ją nazwać.
źródło
Wartość literału to wartość, ale wartość może być również przechowywana w zmiennej. W oświadczeniu
string str = "string literal";
jest zmienna łańcuchowa (str) i literał łańcuchowy. Po wykonaniu instrukcji obie mają tę samą wartość.
Należy pamiętać, że w wielu językach zmienna i wartość literalna niekoniecznie muszą być nawet tego samego typu. Na przykład:
int a = 1.0;
Powyższa wartość literału jest typem zmiennoprzecinkowym. Wartość zostanie wymuszona przez kompilator w celu dopasowania do zmiennej int.
Na przykład, w pierwszym wierszu kodu C ++ powyżej typ literału ciągu nie jest w rzeczywistości typem biblioteki
string
. Aby zachować zgodność wsteczną z C, literały ciągów w C ++ są tablicami char.źródło
Szybki przykład:
int my_int_var = 723;
723 - Ten zestaw znaków odnosi się do literalnej liczby całkowitej.
my_int_var - ten zestaw znaków odnosi się do zmiennej wartości całkowitej.
źródło
Literał występuje wtedy, gdy umieścisz go w kodzie. Tak więc literał ciągu to
string s = "SomeText";
Jest to w przeciwieństwie do budowania łańcucha lub przyjmowania go jako parametru.
źródło
Generalnie, gdy ktoś używa słowa dosłowne, oznacza to, że wartość jest możliwa do odczytania z kodu (tekstu), jak pokazano w wielu przykładach w innych postach.
Innym typowym zastosowaniem są wartości, które są konwertowane na wartości bezpośrednie w zestawie. Są to wartości, które są wstawiane bezpośrednio do instrukcji maszynowej, a nie wymagają ładowania rejestrów.
źródło
Literał to „reprezentacja danych w kodzie źródłowym”.
źródło
Słyszałem, że literały łańcuchowe używane przypadkowo w odniesieniu do tego, co specyfikacja C # faktycznie odnosi się do literałów ciągów dosłownych. Zwykły literał łańcuchowy pozwala na unikanie pewnych znaków (poprzedzonych a), takich jak \ t dla tabulatora. Dosłowny literał ciągu jest poprzedzony znakiem @ i przetwarzany dosłownie, \ nie ma specjalnego znaczenia.
//regular string regular = "\thello world"; //verbatim string verbatim = @"C:\"; //the regular equivalent of this would be "C:\\"
źródło
Literały to skrócona notacja wartości w pewnych typach, które język uważa za tak ważne lub fundamentalne, że specjalnie dla nich wyznaczył cukier składniowy.
Przykładowe typy, których wartości są często reprezentowane przez literały:
Boolean = { true, false } Integer = { ..., -2, -1, 0, 1, 2, ... } Character = { 'a', 'b', ... } String = { "hello", "world", ... }
Niektóre języki mają literały nawet dla typów funkcji:
Integer -> Integer = { (x: Integer) => x + 2), (x: Integer) => x/2, ...}
Przykładem wartości, które zwykle nie są reprezentowane za pomocą literałów, byłyby wartości typów klas:
Car(brand: String, seats: Integer) = { Car("BMW", 5), Car("Ferrari", 2), ...}
Tutaj wartość
Car("BMW", 5)
w typieCar
jest rzeczywiście jednoznacznie oznaczona za pomocą sekwencji symboli, jednak wartość nie jest reprezentowana przy użyciu dedykowanego skróconego literału, ale zamiast tego wykorzystuje ogólne (rozwlekłe) mechanizmy pojęciowe do oznaczania wartości dowolnego typu.Termin literał jest synonimem terminów wartość , instancja , stała , element członkowski i element typu, ale niesie ze sobą dodatkowe znaczenie, które mówi nam, że istnieje skrót na zapisanie tego.
Lubię myśleć o literałach jako o egipskich hieroglifach, a nie o łączeniu znaków alfabetu w celu wyrażenia koncepcji.
źródło