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 Sunday

Variá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)100

Você 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)100

Parâ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