(日本語訳) Chain Castle – Lesson 1 Chapter 5

Libra
Libra Move言語
スポンサーリンク

Chapter 5 プロシージャ

チャプタ2で言及した様に、プロシージャは他のプログラミング言語における関数と同じ様に、モジュール内で定義できます。

プロシージャの定義

プロシージャを宣言するために、そのビジビリティ(アクセス権)、名前、パラメータと戻り値を次のフォーマットで宣言します。

Visibility Procedure name (parameter name): The type of return value

プロシージャがパラメータを持たない時には、パラメータ名は宣言する必要がありません。また、戻り値がない場合には戻り値の型を宣言する必要はありません。

モジュール内のプロセスは二つの種類のビジビリティを持ちます。

  • public:パブリックプロシージャは他のモジュールから呼ぶことができます。
  • private:プライベートプロシージャは同じモジュールのプロシージャからのみ呼ばれます。モジュール内のリソースは、プライベートであり他のモジュールからはパブリックプロシージャを通してのみアクセスされます。

パラメータも戻り値も無いプロシージャは、次のようなフォーマットで宣言されます。

public Procedure() { 
    return;
}

パラメータのあるプロシージャの場合は次の様に宣言されます。

public Procedure(a: u64, b: u64) {
// パラメータの型が異なっている場合や、パラメータの数が異なる場合も形は同様です。
    return;
}

プロシージャそれ自身も他のプロシージャのパラメータとして使われることがあることに注意してください。

プロシージャが戻り値を持つなら、次の様に宣言されます。

public Procedure(a: u64, b: u64) : u64 {
// 戻り値の型が異なる場合でも形は同様です。
    return 1;
}

上記の例においては、パブリックなプロシージャのみ定義しました。もしプライベートプロシージャを宣言したいならpublicの表記を消すのみです。

プロシージャをコールする

プロシージャはmodule name.procedure nameによって呼ばれます。プロシージャが同じモジュール内の他のプロシージャによって呼ばれる場合はSelf.procedure nameというフォーマットを使います。

次はプロシージャを定義してコールするサンプルです。

modules:
module Contract {
    public Procedure() { //定義部分。Procedureという名前のパブリックなプロシージャ
        return;
    }
}

script: 
import Transaction.Contract;
main() {
    Contract.Procedure(); //コール部分。Contractはモジュール名
    Call the procedure whose module name is Contract
    return;
}

実習

前のチャプタで言及した通り、剰余演算子(%)をシリアルナンバー用の8桁の整数を得るために使います。10のn乗で割った余りはn桁の整数となるため、ここでは10の8乗を計算する手続きを採用していきます。

  1. BuildCastleモジュールの前に、このコースで必要な全ての計算手続きを含むMathモジュールを作ります。

  2. 次の様に、新しく作ったモジュール内に乗数計算を行うプロシージャpow()を宣言してください。

    • パラメータ:u64型の基数xと乗数n
    • 戻り値:u64型の乗算結果値
    • 計算内容:とりあえず空。コンパイルを成功させるために、戻り値を1に設定しておきましょう。この機能については次のチャプタで実装します。
  3. Mathモジュールをmain()の前にインポートし、SerialDigitsの後に、シリアルナンバー内の桁数を表す、SerialLimitと名付けたu64の変数を宣言します。

Move Castle
タイトルとURLをコピーしました