このセクションでは、Move言語におけるコードシステムの基本単位であるモジュールについて説明します。モジュールはコードをグループ化し隔離するために使用され、モジュールのメンバーはデフォルトでモジュール内部にプライベートです。このセクションでは、モジュールの定義方法、メンバーの宣言方法、および他のモジュールからのアクセス方法を学びます。

モジュール宣言

モジュールは、module キーワードの後にパッケージアドレス、モジュール名、そして中括弧 {} 内にモジュール本体を続けて宣言されます。モジュール名はスネークケース(単語間にアンダースコアが付いた全て小文字の文字)であるべきです。モジュール名はパッケージ内で一意でなければなりません。

通常、sources/ フォルダ内の単一のファイルには一つのモジュールが含まれます。ファイル名はモジュール名と一致するべきです。たとえば、donut_shop モジュールは donut_shop.move ファイルに保存されるべきです。コーディング規約については コーディング規約セクションでさらに読むことができます。

module book::my_module {
    // モジュール本体
}

構造体、関数、定数、インポートはすべてモジュールの一部です:

アドレス / 名前付きアドレス

モジュールアドレスは、アドレスリテラル(@プレフィックスは必要ありません)または パッケージマニフェスト [TODO] で指定された名前付きアドレスとして指定することができます。以下の例では、Move.toml[addresses]セクションに book = "0x0" のレコードがあるため、両方は同一です。

module 0x0::address_literal { /* ... */ }
module book::named_address { /* ... */ }

Move.tomlのアドレスセクション:

# Move.toml
[addresses]
book = "0x0"

モジュールメンバー

モジュールメンバーはモジュール本体内で宣言されます。それを示すために、構造体、関数、および定数を持つシンプルなモジュールを定義しましょう:

module book::my_module_with_members {
    // インポート
    use book::my_module;

    // 定数
    const CONST: u8 = 0;

    // 構造体
    public struct Struct {}

    // メソッドエイリアス
    public use fun function as Struct.struct_fun;

    // 関数
    fun function(_: &Struct) { /* 関数本体 */ }
}

参考文献