Programowanie D - Literały
Wywoływane są stałe wartości, które są wpisywane w programie jako część kodu źródłowego literals.
Literały mogą mieć dowolny z podstawowych typów danych i można je podzielić na liczby całkowite, liczby zmiennoprzecinkowe, znaki, ciągi znaków i wartości logiczne.
Ponownie, literały są traktowane tak jak zwykłe zmienne, z tym wyjątkiem, że ich wartości nie mogą być modyfikowane po ich definicji.
Literały całkowite
Literał liczby całkowitej może mieć następujące typy:
Decimal używa normalnej reprezentacji liczb, przy czym pierwsza cyfra nie może być 0, ponieważ ta cyfra jest zarezerwowana do wskazania systemu ósemkowego.
Octal używa 0 jako prefiksu do numeru.
Binary używa 0b lub 0B jako prefiksu.
Hexadecimal używa 0x lub 0X jako prefiksu.
Literał liczby całkowitej może również mieć sufiks będący kombinacją U i L, odpowiednio dla unsigned i long. Sufiks może być pisany wielką lub małą literą i może mieć dowolną kolejność.
Gdy nie używasz sufiksu, kompilator sam wybiera między int, uint, long i ulong na podstawie wielkości wartości.
Oto kilka przykładów literałów całkowitych -
212 // Legal
215u // Legal
0xFeeL // Legal
078 // Illegal: 8 is not an octal digit
032UU // Illegal: cannot repeat a suffix
Poniżej znajdują się inne przykłady różnych typów literałów całkowitych -
85 // decimal
0213 // octal
0x4b // hexadecimal
30 // int
30u // unsigned int
30l // long
30ul // unsigned long
0b001 // binary
Literały zmiennoprzecinkowe
Literały zmiennoprzecinkowe można określić albo w systemie dziesiętnym, jak w 1.568, albo w systemie szesnastkowym, jak w 0x91.bc.
W systemie dziesiętnym wykładnik można przedstawić przez dodanie litery e lub E, a następnie liczby. Na przykład 2,3e4 oznacza „2,3 razy 10 do potęgi 4”. Znak „+” można podać przed wartością wykładnika, ale nie ma to żadnego skutku. Na przykład 2.3e4 i 2.3e + 4 są takie same.
Znak „-” dodany przed wartością wykładnika zmienia znaczenie dzielenia przez 10 na potęgę „”. Na przykład 2,3e-2 oznacza „2,3 podzielone przez 10 do potęgi 2”.
W systemie szesnastkowym wartość zaczyna się od 0x lub 0X. Wykładnik jest określony przez p lub P zamiast e lub E. Wykładnik nie oznacza „10 do potęgi”, ale „2 do potęgi”. Na przykład P4 w 0xabc.defP4 oznacza „abc.de razy 2 do potęgi 4”.
Oto kilka przykładów literałów zmiennoprzecinkowych -
3.14159 // Legal
314159E-5L // Legal
510E // Illegal: incomplete exponent
210f // Illegal: no decimal or exponent
.e55 // Illegal: missing integer or fraction
0xabc.defP4 // Legal Hexa decimal with exponent
0xabc.defe4 // Legal Hexa decimal without exponent.
Domyślnie typ literału zmiennoprzecinkowego to double. F i F średnia zmiennoprzecinkowa, a specyfikator L oznacza wartość rzeczywistą.
Literały logiczne
Istnieją dwa literały Boolean i są one częścią standardowych słów kluczowych D -
Wartość true reprezentujące prawdę.
Wartość false reprezentujące fałsz.
Nie powinieneś brać pod uwagę wartości true równej 1 i wartości fałszu równej 0.
Literały postaci
Literały znakowe są ujęte w pojedyncze cudzysłowy.
Literał znakowy może być zwykłym znakiem (np. „X”), sekwencją ucieczki (np. „\ T”), znakiem ASCII (np. „\ X21”), znakiem Unicode (np. „\ U011e”) lub jako znak nazwany (np. „\ ©”, „\ ♥”, „\ €”).
Istnieją pewne znaki w D, gdy są poprzedzone odwrotnym ukośnikiem, będą miały specjalne znaczenie i są używane do reprezentowania jak nowa linia (\ n) lub tabulator (\ t). Tutaj masz listę niektórych takich kodów sekwencji ucieczki -
Sekwencja ewakuacyjna | Znaczenie |
---|---|
\\ | \ postać |
\ ' | ' postać |
\ " | " postać |
\? | ? postać |
\za | Alert lub dzwonek |
\b | Backspace |
\fa | Form feed |
\ n | Nowa linia |
\ r | Powrót karetki |
\ t | Zakładka pozioma |
\ v | Zakładka pionowa |
Poniższy przykład przedstawia kilka znaków sekwencji ucieczki -
import std.stdio;
int main(string[] args) {
writefln("Hello\tWorld%c\n",'\x21');
writefln("Have a good day%c",'\x21');
return 0;
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Hello World!
Have a good day!
Literały strunowe
Literały łańcuchowe są ujęte w podwójne cudzysłowy. Ciąg zawiera znaki podobne do literałów znakowych: zwykłe znaki, sekwencje ucieczki i znaki uniwersalne.
Możesz podzielić długi wiersz na wiele wierszy za pomocą literałów łańcuchowych i oddzielić je odstępami.
Oto kilka przykładów literałów tekstowych -
import std.stdio;
int main(string[] args) {
writeln(q"MY_DELIMITER
Hello World
Have a good day
MY_DELIMITER");
writefln("Have a good day%c",'\x21');
auto str = q{int value = 20; ++value;};
writeln(str);
}
W powyższym przykładzie można znaleźć użycie q "MY_DELIMITER MY_DELIMITER" do reprezentowania znaków wieloliniowych. Możesz również zobaczyć q {}, aby reprezentować samą instrukcję języka D.