
- D 程式設計基礎
- D 程式設計 - 首頁
- D 程式設計 - 概述
- D 程式設計 - 環境
- D 程式設計 - 基本語法
- D 程式設計 - 變數
- D 程式設計 - 資料型別
- D 程式設計 - 列舉
- D 程式設計 - 字面量
- D 程式設計 - 運算子
- D 程式設計 - 迴圈
- D 程式設計 - 條件判斷
- D 程式設計 - 函式
- D 程式設計 - 字元
- D 程式設計 - 字串
- D 程式設計 - 陣列
- D 程式設計 - 關聯陣列
- D 程式設計 - 指標
- D 程式設計 - 元組
- D 程式設計 - 結構體
- D 程式設計 - 聯合體
- D 程式設計 - 範圍
- D 程式設計 - 別名
- D 程式設計 - Mixins
- D 程式設計 - 模組
- D 程式設計 - 模板
- D 程式設計 - 不可變物件
- D 程式設計 - 檔案 I/O
- D 程式設計 - 併發
- D 程式設計 - 異常處理
- D 程式設計 - 合約
- D - 條件編譯
- D 程式設計 - 面向物件
- D 程式設計 - 類與物件
- D 程式設計 - 繼承
- D 程式設計 - 過載
- D 程式設計 - 封裝
- D 程式設計 - 介面
- D 程式設計 - 抽象類
- D 程式設計 - 有用資源
- D 程式設計 - 快速指南
- D 程式設計 - 有用資源
- D 程式設計 - 討論
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
廣告