跳轉到內容

D (程式語言)/d2/模組

50% developed
來自華夏公益教科書,自由的教科書

第 6 課:模組

[編輯 | 編輯原始碼]

在本課中,您將瞭解 D 的模組系統。模組是包含變數、函式和其他 D 結構定義的程式碼單元,這些程式碼單元屬於一起。這對於建立可重用程式碼很有用。您在每一課中都看到了模組。事實上,所有 D 原始檔都是模組。stdio 模組包含像 writeln 這樣的函式。stdio 模組寫在名為 stdio.d 的檔案中,位於dmd/src/phobos/std/stdio.d。它包含對控制檯輸入輸出和檔案輸入輸出有用的程式碼。它位於名為std中,其中還包含其他模組,如 std.algorithmstd.string,您將在以後學習。Phobos 庫只是隨 D 編譯器一起提供的一個大型模組集合。

入門程式碼

[編輯 | 編輯原始碼]
// main.d
module main;

import std.stdio;
import module1;
import byebye : sayBye;
 
void main()
{
    happy();
    writeln("Mothers Day!");
    sayBye();
    // sayByeInItalian(); undefined identifier 'sayByeInItalian'
}
// happy.d
module module1;

import std.stdio;

void happy()
{
    write("Happy ");
}

private void sad()
{
    write("Who gives a darn about ");
}

private:
void mad() { }
void bad() { }
//bye.d
module byebye;
import std.stdio;

void sayBye()
{
    writeln("Goodbye!");
}

void sayByeInItalian()
{
   writeln("Arrivederci");
}

像這樣編譯:dmd main.d happy.d bye.d

深入瞭解匯入

[編輯 | 編輯原始碼]

所有 D 程式碼都在模組內。在 D 程式中,必須有一個包含main 函式的模組。如果一個模組匯入另一個模組,則被匯入模組的定義將對第一個模組可用。在入門程式碼中,main 模組匯入了另外兩個模組:module1byebye。但是,當匯入byebye 時,只匯入了一個函式:sayBye 函式。該語法為import modulename : identifier1, identifier2, identifier3;

模組宣告

[編輯 | 編輯原始碼]

D 原始檔可以使用模組宣告來指定模組的名稱以及它所屬的包,該宣告位於開頭。例如,在stdio 模組中,有以下行

module std.stdio;

該行指定了模組的名稱(stdio)以及它所在的包(std)。每個原始檔最多隻能有一個模組宣告。如果沒有,則原始檔名(不帶副檔名)將成為模組名稱。

可見性

[編輯 | 編輯原始碼]

module1sad 定義中的void 之前,您看到了修飾符private。這意味著sad 函式無法匯入。您也不能執行import module1 : sad。如果您看到一行說private:,則該行下面的所有內容都是private。同樣,如果您看到private { } ,則大括號內的所有內容都是 private。

  • 模組的名稱不必與該模組內的定義的名稱相關。
  • 模組的名稱不必與檔名相關。
  • 還有一個public 修飾符,它與private 修飾符相反。既沒有用public 標記也沒有用private 標記的宣告預設情況下是public 的。
  • 所有 D 原始檔都是模組,即使檔案中沒有模組宣告。
華夏公益教科書