D編程 不可變

2021-09-01 10:40 更新

我們經常使用可變的變量,但是在很多情況下不需要可變性。

D的不變性概念由const和immutable關鍵字表示,盡管這兩個詞本身的含義很接近,但它們在程序中的職責有所不同,有時是不兼容的。

枚舉常量

枚舉常量使將常量值與有意義的名稱相關聯(lián)成為可能,一個簡單的如下所示。

 
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"); 
   } 
}

編譯并執(zhí)行上述代碼后,將產生以下輸出-

The day is Sunday

不變變量

不變變量可以在程序執(zhí)行期間確定,它只是指示編譯器在初始化之后變得不可變。一個簡單的如下所示。

 
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); 
}

編譯并執(zhí)行上述代碼后,將產生以下輸出-

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); 
   //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); 
}

編譯并執(zhí)行上述代碼后,將產生以下輸出-

0: 1 
1: 2


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號