我们经常使用的是可变的变量,但可以有很多场合是不需要可变。不可变的变量可以在这样的情况下被使用。几个例子下面给出其中不可改变的变量都可以使用。
-
像圆周率是永远不变的数学常数。
-
阵列,其中我们希望保留的值,这是不突变的要求。
不变性使得它可以用于理解变量是不可变的或可变的低保某些操作不改变某些变量。它也减少某些类型的程序的错误的风险。 D语言的不变性概念是由const和不可改变的关键字来表示。虽然这两个词本身词义相近,它们在程序的责任是不同的,有时却是不兼容的。
不可变的变量的类型
有三种类型的限定,可以从未被可变的变量。
-
枚举常量
-
不可变的变量
-
const的变量
枚举常量
枚举常量使我们能够与常数值为有意义的名称。一个简单的例子如下所示。
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
不可变的变量
不可变的变量可以在程序的执行过程中确定。它只是指示的初始化后,它成为不可改变的编译器。一个简单的例子如下所示。
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同时打印。
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
不可改变的参数
常量删除对原变量是否是可变的或者不可变的,因此使用不可变使得它通过它的其他函数保留了原始类型的信息。一个简单的例子如下所示。
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