Programación D - Inmutable
A menudo usamos variables que son mutables, pero puede haber muchas ocasiones en que no se requiera la mutabilidad. En tales casos se pueden utilizar variables inmutables. A continuación se dan algunos ejemplos en los que se puede utilizar una variable inmutable.
En el caso de constantes matemáticas como pi que nunca cambian.
En el caso de matrices donde queremos retener valores y no son requisitos de mutación.
La inmutabilidad permite comprender si las variables son inmutables o mutables garantizando que determinadas operaciones no modifican determinadas variables. También reduce el riesgo de ciertos tipos de errores de programa. El concepto de inmutabilidad de D está representado por las palabras clave constante e inmutable. Aunque las dos palabras en sí mismas tienen un significado cercano, sus responsabilidades en los programas son diferentes y, a veces, son incompatibles.
El concepto de inmutabilidad de D está representado por las palabras clave constante e inmutable. Aunque las dos palabras en sí mismas tienen un significado cercano, sus responsabilidades en los programas son diferentes y, a veces, son incompatibles.
Tipos de variables inmutables en D
Hay tres tipos de variables definitorias que nunca pueden modificarse.
- constantes enum
- variables inmutables
- variables constantes
enum Constantes en D
Las constantes enum permiten relacionar valores constantes con nombres significativos. A continuación se muestra un ejemplo sencillo.
Ejemplo
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");
}
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
The day is Sunday
Variables inmutables en D
Las variables inmutables se pueden determinar durante la ejecución del programa. Simplemente indica al compilador que después de la inicialización, se vuelve inmutable. A continuación se muestra un ejemplo sencillo.
Ejemplo
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);
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
immutable(int)4
immutable(int)100
Puede ver en el ejemplo anterior cómo es posible transferir el tipo de datos a otra variable y usar stringof mientras imprime.
Variables de constante en D
Las variables constantes no se pueden modificar de forma similar a inmutables. las variables inmutables se pueden pasar a funciones como sus parámetros inmutables y, por lo tanto, se recomienda usar inmutable sobre const. El mismo ejemplo utilizado anteriormente se modifica para const como se muestra a continuación.
Ejemplo
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);
}
Si compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado:
const(int)7
const(int)100
Parámetros inmutables en D
const borra la información sobre si la variable original es mutable o inmutable y, por lo tanto, el uso de inmutable hace que le pase otras funciones con el tipo original retenido. A continuación se muestra un ejemplo sencillo.
Ejemplo
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);
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
0: 1
1: 2