Programação D - Imutável
Freqüentemente, usamos variáveis que são mutáveis, mas pode haver muitas ocasiões em que a mutabilidade não é necessária. Variáveis imutáveis podem ser usadas em tais casos. Alguns exemplos são fornecidos abaixo, onde variáveis imutáveis podem ser usadas.
- No caso de constantes matemáticas, como pi, que nunca mudam. 
- No caso de arrays onde queremos reter valores e não há requisitos de mutação. 
A imutabilidade permite entender se as variáveis são imutáveis ou mutáveis garantindo que certas operações não alterem certas variáveis. Também reduz o risco de certos tipos de erros de programa. O conceito de imutabilidade de D é representado pelas palavras-chave const e immutable. Embora as duas palavras tenham um significado semelhante, suas responsabilidades nos programas são diferentes e, às vezes, incompatíveis.
O conceito de imutabilidade de D é representado pelas palavras-chave const e immutable. Embora as duas palavras tenham um significado semelhante, suas responsabilidades nos programas são diferentes e, às vezes, incompatíveis.
Tipos de variáveis imutáveis em D
Existem três tipos de variáveis de definição que nunca podem sofrer mutação.
- constantes enum
- variáveis imutáveis
- variáveis const
enum Constants in D
As constantes enum possibilitam relacionar valores constantes a nomes significativos. Um exemplo simples é mostrado abaixo.
Exemplo
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 o código acima é compilado e executado, ele produz o seguinte resultado -
The day is SundayVariáveis imutáveis em D
Variáveis imutáveis podem ser determinadas durante a execução do programa. Ele apenas direciona o compilador para que, após a inicialização, ele se torne imutável. Um exemplo simples é mostrado abaixo.
Exemplo
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 o código acima é compilado e executado, ele produz o seguinte resultado -
immutable(int)4 
immutable(int)100Você pode ver no exemplo acima como é possível transferir o tipo de dados para outra variável e usar stringof durante a impressão.
Variáveis Const em D
Variáveis Const não podem ser modificadas de forma semelhante a imutáveis. variáveis imutáveis podem ser passadas para funções como seus parâmetros imutáveis e, portanto, é recomendado usar imutável em vez de const. O mesmo exemplo usado anteriormente é modificado para const conforme mostrado abaixo.
Exemplo
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 compilarmos e executarmos o código acima, isso produzirá o seguinte resultado -
const(int)7 
const(int)100Parâmetros imutáveis em D
const apaga as informações sobre se a variável original é mutável ou imutável e, portanto, usar imutável faz com que ela passe para outras funções com o tipo original retido. Um exemplo simples é mostrado abaixo.
Exemplo
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 o código acima é compilado e executado, ele produz o seguinte resultado -
0: 1 
1: 2