首页 > 其他分享 >无涯教程-D语言 - 不可变(Immutables)

无涯教程-D语言 - 不可变(Immutables)

时间:2023-11-18 13:32:15浏览次数:37  
标签:教程 const Immutables int number 无涯 import immutable 变量

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

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

枚举常量

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

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

参考链接

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

标签:教程,const,Immutables,int,number,无涯,import,immutable,变量
From: https://blog.51cto.com/u_14033984/8461506

相关文章

  • Windos操作系统下的Zookeeper安装图文教程
    凯哥已经准备好最新版本3.9.1且已经配置好了。既获取到配置好的。获取到凯哥准备的安装后,只需要修改一下配置。将解压包解压后,找到conf文件,里面有个zoo.cfg配置文件。如下图:下载后conf文件夹内容打开zoo.cfg配置文件后,找到13、14这两行。将dataDir和dataLogDir的路径修改成自......
  • Windos操作系统下的Zookeeper安装图文教程
    凯哥已经准备好最新版本3.9.1且已经配置好了。既获取到配置好的。获取到凯哥准备的安装后,只需要修改一下配置。将解压包解压后,找到conf文件,里面有个zoo.cfg配置文件。如下图:下载后conf文件夹内容打开zoo.cfg配置文件后,找到13、14这两行。将dataDir和dataLogDir的路径修改成自己的就......
  • 无涯教程-D语言 - 模板(Templates)
    模板是通用编程的基础,它涉及以独立于任何特定类型的方式编写代码。函数模板将函数定义为模板会将其使用的一种或多种类型保留为未指定状态,以便稍后由编译器推导。在模板参数列表中定义了未指定的类型,该参数介于函数名称和函数参数列表之间。因此,函数模板具有两个参数列表-模板......
  • kafka安装教程
    检查java8没有就安装java-version安装jdk1.8yum-yinstalljava-1.8.0-openjdk下载kafka(网速很慢)wgethttps://dlcdn.apache.org/kafka/3.5.0/kafka_2.13-3.5.0.tgz解压缩tar-xzfkafka_2.13-3.5.0.tgzcdkafka_2.13-3.5.0后台启动ZooKeeper服务(这里使用kafka里......
  • 无涯教程-D语言 - 范围(Ranges)
    范围range是元素访问的抽象,范围强调如何访问容器元素,而不是如何实现容器。Numberranges数字范围是非常常用,这些数字范围是int类型的,下面是一些数字范围的示例-//示例1foreach(value;3..7)//示例2int[]slice=array[5..10];PhobosRanges与结构和类接口有关的范围是......
  • Kafka入门教程与详解(一)
    Kafka入门教程与详解(一)一、Kafka入门教程1.1消息队列(MessageQueue)MessageQueue消息传送系统提供传送服务。消息传送依赖于大量支持组件,这些组件负责处理连接服务、消息的路由和传送、持久性、安全性以及日志记录。消息服务器可以使用一个或多个代理实例。JMS(JavaMessaging......
  • 无涯教程-D语言 - 数组(Arrays)
    D编程语言提供了一种名为arrays的数据结构,该数据结构存储相同类型元素的固定大小的顺序集合,数组用于存储数据集合。声明数组要使用D编程语言声明数组,程序员可以指定元素的类型和数组所需的元素数量,如下所示:typearrayName[arraySize];这称为一维数组,arraySize必须是......
  • 无涯教程-D语言 - 字符串(Strings)
    字符数组我们可以用以下两种形式来表示字符数组.第一种形式直接提供大小,第二种形式使用dup方法创建字符串"Goodmorning"。char[9]greeting1="Hellolearnfk";char[]greeting2="Goodmorning".dup;这是使用上述简单字符数组形式的简单示例。importstd.stdio;voidm......
  • 焕颜AI DeepfaceKit 换脸变声教程
    下载安装1.软件下载地址https://exluyyho90p.feishu.cn/docx/TRBWdOfkIoFMeYxZiDZc7k62nud2.打开软件3.进入软件首页使用须知:软件集成AI实时换脸、克隆声音、背景替换、实时美颜、一键遮罩、视频图片等功能传统的Swapface、Deepface....这类软件对电脑配置要求很高,不然会非常的卡顿......
  • 无涯教程-D语言 - 条件判断
    条件判断结构包含要判断的条件以及要执行的两组语句。如果条件为true,则执行一组语句,如果条件为false,则执行另一组语句。D编程语言将任何非零和非空值假定为true,并且如果其值为零或null,则假定为false值。Sr.No.Statement&描述1ifstatementif语句由布尔表达式和一......