このセクションでは、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) { /* 関数本体 */ }
}