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
廣告