Programmazione D - Letterali

Vengono chiamati i valori costanti digitati nel programma come parte del codice sorgente literals.

I letterali possono essere di qualsiasi tipo di dati di base e possono essere suddivisi in numeri interi, numeri in virgola mobile, caratteri, stringhe e valori booleani.

Anche in questo caso, i letterali vengono trattati come variabili regolari, tranne per il fatto che i loro valori non possono essere modificati dopo la loro definizione.

Letterali interi

Un valore letterale intero può essere uno dei seguenti tipi:

  • Decimal usa la normale rappresentazione del numero con la prima cifra non può essere 0 poiché quella cifra è riservata per indicare il sistema ottale. Questo non include 0 da solo: 0 è zero.

  • Octal usa 0 come prefisso al numero.

  • Binary usa 0b o 0B come prefisso.

  • Hexadecimal usa 0x o 0X come prefisso.

Un valore letterale intero può anche avere un suffisso che è una combinazione di U e L, rispettivamente per unsigned e long. Il suffisso può essere maiuscolo o minuscolo e può essere in qualsiasi ordine.

Quando non si utilizza un suffisso, il compilatore stesso sceglie tra int, uint, long e ulong in base all'entità del valore.

Ecco alcuni esempi di valori letterali interi:

212         // Legal 
215u        // Legal 
0xFeeL      // Legal 
078         // Illegal: 8 is not an octal digit 
032UU       // Illegal: cannot repeat a suffix

Di seguito sono riportati altri esempi di vari tipi di letterali interi:

85         // decimal 
0213       // octal
0x4b       // hexadecimal 
30         // int 
30u        // unsigned int 
30l        // long 
30ul       // unsigned long 
0b001      // binary

Valori letterali in virgola mobile

I valori letterali in virgola mobile possono essere specificati nel sistema decimale come in 1.568 o nel sistema esadecimale come in 0x91.bc.

Nel sistema decimale, un esponente può essere rappresentato aggiungendo il carattere e o E e un numero dopo. Ad esempio, 2.3e4 significa "2,3 per 10 alla potenza di 4". È possibile specificare un carattere "+" prima del valore dell'esponente, ma non ha effetto. Ad esempio 2.3e4 e 2.3e + 4 sono gli stessi.

Il carattere "-" aggiunto prima del valore dell'esponente cambia il significato da "diviso per 10 alla potenza di". Ad esempio, 2.3e-2 significa "2.3 diviso per 10 alla potenza di 2".

Nel sistema esadecimale, il valore inizia con 0x o 0X. L'esponente è specificato da p o P invece di e o E. L'esponente non significa "10 alla potenza di", ma "2 alla potenza di". Ad esempio, il P4 in 0xabc.defP4 significa "abc.de moltiplicato per 2 alla potenza di 4".

Ecco alcuni esempi di valori letterali a virgola mobile:

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.

Per impostazione predefinita, il tipo di un valore letterale a virgola mobile è double. F e F significano float e l'identificatore L significa reale.

Valori letterali booleani

Ci sono due letterali booleani e fanno parte di parole chiave D standard:

  • Un valore di true che rappresenta il vero.

  • Un valore di false che rappresenta falso.

Non dovresti considerare il valore di true uguale a 1 e il valore di false uguale a 0.

Letterali carattere

I caratteri letterali sono racchiusi tra virgolette singole.

Un carattere letterale può essere un carattere semplice (ad es. "X"), una sequenza di escape (ad es. "\ T"), un carattere ASCII (ad es. "\ X21"), un carattere Unicode (ad es. "\ U011e") o come carattere con nome (ad esempio "\ ©", "\ ♥", "\ €").

Ci sono alcuni caratteri in D quando sono preceduti da una barra rovesciata avranno un significato speciale e sono usati per rappresentare come una nuova riga (\ n) o una tabulazione (\ t). Qui, hai un elenco di alcuni di questi codici di sequenza di escape:

Sequenza di fuga Senso
\\ \ personaggio
\ ' ' personaggio
\ " " personaggio
\? ? personaggio
\un Allerta o campanello
\ b Backspace
\ f Avanzamento modulo
\ n Nuova linea
\ r Ritorno in carrozza
\ t Tabulazione orizzontale
\ v Tab verticale

L'esempio seguente mostra alcuni caratteri della sequenza di escape:

import std.stdio;
  
int main(string[] args) { 
   writefln("Hello\tWorld%c\n",'\x21'); 
   writefln("Have a good day%c",'\x21'); 
   return 0; 
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

Hello   World!

Have a good day!

Valori letterali stringa

I valori letterali stringa sono racchiusi tra virgolette doppie. Una stringa contiene caratteri simili ai letterali carattere: caratteri normali, sequenze di escape e caratteri universali.

È possibile suddividere una lunga riga in più righe utilizzando stringhe letterali e separarle utilizzando spazi bianchi.

Ecco alcuni esempi di stringhe letterali:

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); 
}

Nell'esempio sopra, puoi trovare l'uso di q "MY_DELIMITER MY_DELIMITER" per rappresentare caratteri su più righe. Inoltre, puoi vedere q {} per rappresentare una dichiarazione del linguaggio D stesso.