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