D語言常量
我們經常使用的是可變的變量,但可以有很多場合是不需要可變。不可變的變量可以在這樣的情況下被使用。幾個例子下麵給出其中不可改變的變量都可以使用。
-
像圓周率是永遠不變的數學常數。
-
陣列,其中我們希望保留的值,這是不突變的要求。
不變性使得它可以用於理解變量是不可變的或可變的低保某些操作不改變某些變量。它也減少某些類型的程序的錯誤的風險。 D語言的不變性概念是由const和不可改變的關鍵字來表示。雖然這兩個詞本身詞義相近,它們在程序的責任是不同的,有時卻是不兼容的。
不可變的變量的類型
有三種類型的限定,可以從未被可變的變量。
-
枚舉常量
-
不可變的變量
-
const的變量
枚舉常量
枚舉常量使我們能夠與常數值為有意義的名稱。一個簡單的例子如下所示。
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); // 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同時打印。
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
不可改變的參數
常量刪除對原變量是否是可變的或者不可變的,因此使用不可變使得它通過它的其他函數保留了原始類型的信息。一個簡單的例子如下所示。
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