📅  最后修改于: 2020-11-04 05:16:57             🧑  作者: Mango
我们经常使用可变的变量,但是在很多情况下不需要可变性。在这种情况下可以使用不可变变量。下面给出了一些可以使用不可变变量的示例。
在数学常数如pi的情况下,它永远不会改变。
如果是数组,我们要保留值,这不是突变的要求。
不变性使得了解变量是可变的还是可变的成为可能,从而保证了某些操作不会更改某些变量。它还降低了某些类型的程序错误的风险。 D的不变性概念由const和不变性关键字表示。尽管这两个词本身的含义很接近,但它们在程序中的职责有所不同,有时是不兼容的。
D的不变性概念由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
const会删除有关原始变量是可变变量还是不可变变量的信息,因此使用不可变变量会使它传递保留原始类型的其他函数。一个简单的例子如下所示。
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