跳轉到內容

D 入門指南/基礎/D 的結構

來自華夏公益教科書,開放的世界,開放的書籍


本節假設您已經閱讀了關於程式設計的一般介紹,並且瞭解什麼是程式以及什麼是原始碼。

程式設計

[編輯 | 編輯原始碼]

從根本上說,計算機程式是計算機執行的一系列指令。 從文字編輯器到 3D 遊戲,一切都是如此。 在其最低級別(中央處理器),計算機有一組它可以執行的指令。 雖然這組指令是一種程式語言,但它有一些問題,使其難以用於普通程式設計。 正因為如此,有程式語言更具表現力,併為程式設計師提供了更輕鬆的編寫程式的方式,例如 D。 編譯器是一種程式,它將用這種程式語言編寫的程式碼轉換為計算機可以使用的語言(稱為機器碼)。

包括 D 在內的許多程式語言都以一系列指令的形式表達,這些指令按順序執行。 這一概念對計算機和人類來說都很容易理解。 在 D 中,這些指令稱為語句。

語句是對計算機的(可能是非常複雜的)指令。 單個語句以 ';'(分號)結尾,並且可以將任意數量的語句直接放在彼此之後,只要它們都以 ';'(分號)結尾即可。 因此,語句序列 'a'、'b'、'c' 寫成

a;
b;
c;

這段程式碼將使程式按順序執行假設指令 'a'、'b' 和 'c'。

語句有很多型別,每種語句都有不同的用途。

程式能夠儲存資訊非常重要。 在 D(以及大多數程式語言)中,用於儲存資訊的儲存位置稱為變數。 變數有幾種型別,使用哪種型別取決於變數應該儲存哪種資訊。

要使用變數,您首先必須宣告它。 宣告變數只是指定用於儲存它的空間,並將您提供的名稱與該空間關聯起來。 變數宣告是一個語句,其中包含要宣告的變數的型別和名稱。 所有型別的變數將在後面的部分中介紹; 目前只介紹兩種

型別 它是什麼
int 一個數字,例如 1、2、3、0、-4、-3 等。 不能有小數,例如 1.1、2.025。
float 一個數字,例如 1.1、2、3.141、0、-4.15、-3 等。

要宣告一個名為 'foo' 的型別為int的變數,使用以下語句

int foo;

當然,這可以針對任何型別或名稱進行更改,其通用格式為

type name;

如果您不能在其中儲存任何東西,那麼變數就不太有用。 在變數中儲存值稱為賦值該值給變數。 變數只能在宣告之後才能為其賦值,如上所述。 以下語句將值 5 賦值給變數 'foo'

foo = 5;

任何變數都可以透過這種方式被賦值任何值,其通用格式為

variable = value;

D 中的數學很簡單。+用於加法,-用於減法,/用於除法,並且*用於乘法。 要將兩個數字相加,只需在它們之間放置一個+即可,例如

2 + 2

運算順序與數學中的相同。 也就是說,*/+-之前完成。 因此,2 + 2 * 2為 6,而不是 8。您可以透過使用()(括號)來改變這一點。 括號內的任何內容都將在括號外的任何內容之前完成; 同樣,如正常數學。 當2 + 2 * 2為 6 時,(2 + 2) * 2為 8。

這種數學可以在大多數可以使用簡單值的地方使用,包括在賦值中

foo = 2 + 2;

上面的程式碼將值 4 賦值給變數 'foo'。

此外,與代數一樣,您可以在數學中使用變數名而不是數字。 如果存在一個名為 'bar' 的變數,'foo' 可以透過以下方式被賦值 'bar' 的值加 2

foo = bar + 2;

上面提到的型別之間的差異會導致除法產生意外結果。 如果兩個數字(運算元)都是int,則結果值也將是int。 例如,如果您編寫以下除法

1 / 2

則結果將是int。 結果向下取整,因此結果不是 0.5,而是 0!

要避免這種情況,您可以強制一個值成為float:

1 / 2.0

。 由於包含小數點,因此 2.0 被解釋為float,因此整個運算現在被計算為float並得到 0.5 的結果。

任何非平凡的程式都應該像任何其他非平凡的任務一樣,被細分為小塊。

洗車可以細分為首先清潔引擎蓋,然後清洗窗戶,清潔輪輞等等。 您可能需要不同的工具、技術和清潔劑來進行每個子清潔,並且您可能需要進一步細分其中一些任務,因為它們太複雜了。 從根本上說,計算機非常愚蠢:它們必須由人類完成所有這些細分和指令,以供它們使用。 人類大腦會為相當複雜的任務幾乎自動執行此任務細分。

從技術上講,D 中的函式封裝了一組語句,以執行比單個語句可以執行的更抽象的任務。 這些語句中的一個或多個可以反過來是函式呼叫(函式的使用)。

函式有助於組織程式。 在洗車示例中,您可以為清潔汽車窗戶編寫一個函式,而在編寫它時,您不必考慮汽車的其他部分。

稍後,當您在另一個函式中呼叫(使用)它來清潔整輛車時,您不必記住清潔窗戶的詳細方法,因為“清潔窗戶”函式已經“知道”這些細節了。

函式和呼叫的實際結構將在後面的章節中討論。

[TODO:壓縮此節] 要討論的最後一個主題是註釋。 註釋是您告訴 D 編譯器忽略的原始碼檔案的一部分。 它們很有用,因為它們可以讓您在程式碼本身中記錄您的程式碼,或者為了測試目的刪除程式碼的一部分(稱為註釋掉程式碼)。 D 有三種基本型別的註釋:行註釋、非巢狀塊註釋和巢狀註釋。

行註釋非常簡單。 它們以兩個斜槓開頭 (//) 並在一行的末尾結束。 它們主要用於記錄或註釋掉單個程式碼行。 非巢狀塊註釋以斜槓和星號開頭 (/*) 並以星號和斜槓結尾 (*/)。 它們可以跨越多行,但不能巢狀,也不允許多個級別,這意味著即使您有多個/*註釋開啟符,它只需要一個*/註釋更接近於關閉所有註釋。這些註釋主要用於記錄程式碼的整個部分。最後一種型別的註釋,巢狀註釋,與塊註釋的工作方式相同,只是它們確實巢狀,並以斜槓和加號 (/+) 和加號和斜槓 (+/) 分隔。以下示例旨在展示註釋的功能,不應將其視為最佳使用示例。

number = 5; //Number is set to 5
//number = 6;  //We don't want number set to 6
/* The next section of code subtracts one from number and assigns that value to number2 */
number2 = number - 1;
//The following lines demonstrate nesting vs. non-nesting comments:
/+ This type of comment /+ Can /+ nest +/
... +/ still in comment +/
/* This type cannot /* nest 
 */ number = 7; //number is now set to 7
華夏公益教科書