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