D 语言 - Immutable 不可变变量

我们经常使用可变的变量,但很多情况下并不需要可变性。 在这种情况下可以使用不可变变量。 下面给出了一些可以使用不可变变量的示例。

  • 如果数学常量如 pi 永远不会改变。

  • 如果我们想要保留值的数组,并且不需要突变。

不变性使得可以了解变量是不可变的还是可变的,从而保证某些操作不会更改某些变量。 它还降低了某些类型的程序错误的风险。 D 的不变性概念由 const 和 immutable 关键字表示。 尽管这两个词本身的含义很接近,但它们在程序中的职责不同,有时甚至是不兼容的。

D 的不变性概念由 const 和 immutable 关键字表示。 尽管这两个词本身的含义很接近,但它们在程序中的职责不同,有时甚至是不兼容的。

D 中不可变变量的类型

共有三种类型的定义变量永远不能改变。

  • enum 枚举常量
  • immutable 变量
  • const 变量

D 中的 enum 枚举常量

enum 枚举常量可以将常量值与有意义的名称相关联。 下面显示了一个简单的示例。

示例

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"); 
   } 
}

当上面的代码被编译并执行时,会产生以下结果 −

The day is Sunday

D 中的 immutable 变量

immutable 变量可以在程序执行期间确定。 它只是指示编译器在初始化后,它变得不可变。 下面显示了一个简单的示例。

示例

import std.stdio; 
import std.random; 
 
void main() { 
   int min = 1; 
   int max = 10; 
   
   immutable number = uniform(min, max + 1); 
   // 无法修改 immutable 不可变表达式编号
   // number = 34; 
   typeof(number) value = 100;  
   
   writeln(typeof(number).stringof, number); 
   writeln(typeof(value).stringof, value); 
}

当上面的代码被编译并执行时,会产生以下结果 −

immutable(int)4 
immutable(int)100

您可以在上面的示例中看到如何将数据类型传输到另一个变量并在打印时使用 stringof。

D 中的 Const 变量

Const 变量不能像 immutable 那样被修改。 不可变变量可以作为不可变参数传递给函数,因此建议使用 immutable 而不是 const。 前面使用的相同示例针对 const 进行了修改,如下所示。

示例

import std.stdio; 
import std.random; 
 
void main() { 
   int min = 1; 
   int max = 10; 
   
   const number = uniform(min, max + 1); 
   // 无法修改 const 表达式编号| 
   // number = 34; 
   typeof(number) value = 100; 
   
   writeln(typeof(number).stringof, number); 
   writeln(typeof(value).stringof, value); 
}

如果我们编译并运行上面的代码,将会产生以下结果 −

const(int)7 
const(int)100

D 中的不可变参数

const 会删除有关原始变量是可变还是不可变的信息,因此使用 immutable 会使其在保留原始类型的情况下传递给其他函数。 下面显示了一个简单的示例。

示例

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); 
}

当上面的代码被编译并执行时,会产生以下结果 −

0: 1 
1: 2