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