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.