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

不变变量

不变变量可以在程序执行期间确定,它只是指示编译器在初始化之后变得不可变。一个简单的如下所示。

链接:https://www.learnfk.comhttps://www.learnfk.com/d-programming/d-programming-immutable.html

来源:LearnFk无涯教程网

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

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

技术教程推荐

深入剖析Kubernetes -〔张磊〕

重学前端 -〔程劭非(winter)〕

Spring Boot与Kubernetes云原生微服务实践 -〔杨波〕

现代C++编程实战 -〔吴咏炜〕

说透敏捷 -〔宋宁〕

后端存储实战课 -〔李玥〕

动态规划面试宝典 -〔卢誉声〕

流程型组织15讲 -〔蒋伟良〕

说透元宇宙 -〔方军〕

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