D 编程 - 不可变



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

  • 对于像pi这样的数学常数,其值永远不会改变。

  • 对于我们希望保留值并且不需要修改的数组。

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

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

D 中不可变变量的类型

有三种类型的变量定义,它们永远不会被修改。

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

D 中的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 中的不可变变量

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

示例

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

编译并执行上述代码时,将产生以下结果:

immutable(int)4 
immutable(int)100

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

D 中的Const 变量

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

示例

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

如果我们编译并运行上述代码,它将产生以下结果:

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
广告