- D 编程基础
- D 编程 - 首页
- D 编程 - 概述
- D 编程 - 环境
- D 编程 - 基本语法
- D 编程 - 变量
- D 编程 - 数据类型
- D 编程 - 枚举
- D 编程 - 字面量
- D 编程 - 运算符
- D 编程 - 循环
- D 编程 - 条件判断
- D 编程 - 函数
- D 编程 - 字符
- D 编程 - 字符串
- D 编程 - 数组
- D 编程 - 关联数组
- D 编程 - 指针
- D 编程 - 元组
- D 编程 - 结构体
- D 编程 - 联合体
- D 编程 - 范围
- D 编程 - 别名
- D 编程 - Mixins
- D 编程 - 模块
- D 编程 - 模板
- D 编程 - 不可变对象
- D 编程 - 文件 I/O
- D 编程 - 并发
- D 编程 - 异常处理
- D 编程 - 合约
- D - 条件编译
- D 编程 - 面向对象
- D 编程 - 类与对象
- D 编程 - 继承
- D 编程 - 重载
- D 编程 - 封装
- D 编程 - 接口
- D 编程 - 抽象类
- D 编程 - 有用资源
- D 编程 - 快速指南
- D 编程 - 有用资源
- D 编程 - 讨论
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
广告