Programmazione D - Immutabile

Spesso usiamo variabili mutabili, ma possono esserci molte occasioni in cui la mutabilità non è richiesta. In questi casi possono essere utilizzate variabili immutabili. Di seguito vengono forniti alcuni esempi in cui è possibile utilizzare la variabile immutabile.

  • In caso di costanti matematiche come pi greco che non cambiano mai.

  • In caso di array in cui vogliamo mantenere i valori e non è richiesta la mutazione.

L'immutabilità permette di capire se le variabili sono immutabili o mutabili garantendo che certe operazioni non cambino certe variabili. Riduce inoltre il rischio di alcuni tipi di errori di programma. Il concetto di immutabilità di D è rappresentato dalle parole chiave const e immutabili. Sebbene le due parole stesse abbiano un significato vicino, le loro responsabilità nei programmi sono diverse e talvolta sono incompatibili.

Il concetto di immutabilità di D è rappresentato dalle parole chiave const e immutabili. Sebbene le due parole stesse abbiano un significato vicino, le loro responsabilità nei programmi sono diverse e talvolta sono incompatibili.

Tipi di variabili immutabili in D

Esistono tre tipi di variabili di definizione che non possono mai essere modificate.

  • costanti enum
  • variabili immutabili
  • variabili const

enum Costanti in D

Le costanti enum consentono di correlare i valori costanti a nomi significativi. Di seguito viene mostrato un semplice esempio.

Esempio

import std.stdio;

enum Day{ 
   Sunday = 1, 
   Monday,
   Tuesday, 
   Wednesday, 
   Thursday, 
   Friday, 
   Saturday 
} 
 
void main() { 
   Day day; 
   day = Day.Sunday;
   
   if (day == Day.Sunday) { 
      writeln("The day is Sunday"); 
   } 
}

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

The day is Sunday

Variabili immutabili in D

Le variabili immutabili possono essere determinate durante l'esecuzione del programma. Dirige semplicemente il compilatore che dopo l'inizializzazione diventa immutabile. Di seguito viene mostrato un semplice esempio.

Esempio

import std.stdio; 
import std.random; 
 
void main() { 
   int min = 1; 
   int max = 10; 
   
   immutable number = uniform(min, max + 1); 
   // cannot modify immutable expression number 
   // number = 34; 
   typeof(number) value = 100;  
   
   writeln(typeof(number).stringof, number); 
   writeln(typeof(value).stringof, value); 
}

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

immutable(int)4 
immutable(int)100

Puoi vedere nell'esempio sopra come è possibile trasferire il tipo di dati su un'altra variabile e usare stringof durante la stampa.

Variabili costanti in D

Le variabili Const non possono essere modificate come immutabili. le variabili immutabili possono essere passate alle funzioni come parametri immutabili e quindi si consiglia di utilizzare immutable su const. Lo stesso esempio usato in precedenza viene modificato per const come mostrato di seguito.

Esempio

import std.stdio; 
import std.random; 
 
void main() { 
   int min = 1; 
   int max = 10; 
   
   const number = uniform(min, max + 1); 
   // cannot modify const expression number| 
   // number = 34; 
   typeof(number) value = 100; 
   
   writeln(typeof(number).stringof, number); 
   writeln(typeof(value).stringof, value); 
}

Se compiliamo ed eseguiamo il codice sopra, questo produrrebbe il seguente risultato:

const(int)7 
const(int)100

Parametri immutabili in D

const cancella le informazioni sul fatto che la variabile originale sia mutabile o immutabile e quindi l'uso di immutabile le fa passare altre funzioni mantenendo il tipo originale. Di seguito viene mostrato un semplice esempio.

Esempio

import std.stdio; 
 
void print(immutable int[] array) { 
   foreach (i, element; array) { 
      writefln("%s: %s", i, element); 
   } 
}
  
void main() { 
   immutable int[] array = [ 1, 2 ]; 
   print(array); 
}

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

0: 1 
1: 2