D语言 - 不可变(Immutables)

D语言 - 不可变(Immutables) 首页 / D语言入门教程 / D语言 - 不可变(Immutables)

我们经常使用可变的变量,但是在很多情况下不需要可变性。

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

枚举常量

枚举常量使将常量值与有意义的名称相关联成为可能,一个简单的如下所示。

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); 
   //不能修改不可变的表达式编号
   //number=34; 
   typeof(number) value=100;  
   
   writeln(typeof(number).stringof, number); 
   writeln(typeof(value).stringof, value); 
}

编译并执行上述代码后,将产生以下输出-

immutable(int)4 
immutable(int)100

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

常量变量

常量变量不能像不可变一样进行修改,不变变量可以作为不变参数传递给函数,因此建议在const上使用不变。

import std.stdio; 
import std.random; 
 
void main() { 
   int min=1; 
   int max=10; 
   
   const number=uniform(min, max + 1); 
   //不能修改不可变的表达式编号
   //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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

零基础学Python -〔尹会生〕

黄勇的OKR实战笔记 -〔黄勇〕

说透敏捷 -〔宋宁〕

检索技术核心20讲 -〔陈东〕

Selenium自动化测试实战 -〔郭宏志〕

说透数字化转型 -〔付晓岩〕

高并发系统实战课 -〔徐长龙〕

结构思考力 · 透过结构看问题解决 -〔李忠秋〕

工程师个人发展指南 -〔李云〕

好记忆不如烂笔头。留下您的足迹吧 :)