この節では, module
と import
キーワードを使ういくつかのシナリオの例を用意しています.
This section provides examples of different scenarios for using the module
and import
keywords.
これらのキーワードをどうやって使うかを説明しますので, 先のサンプル・コードに進んでいってください.
To illustrate how these keywords are used, let’s step through some sample code.
import のもっとも良くあるシナリオの一つは, このガイドの例の中や例題リポジトリの Motoko プロジェクト, Motoko ベース・ライブラリからモジュールをインポートしているチュートリアルで説明しています. ベース・ライブラリからモジュールをインポートすると, ゼロから似たようなものを書き直さずに, モジュールに定義されている値, 関数, 型を再利用することができます.
One of the most common import scenarios is one that you see illustrated in the examples in this guide, in the Motoko projects in the examples repository, and in the tutorials involves importing modules from the Motoko base library. Importing modules from the base library enables you to re-use the values, functions and types defined in those modules rather than writing similar ones from scratch.
次の二行では, Array
モジュールと Result
モジュールから関数をインポートしています:
The following two lines import functions from the Array
and Result
modules:
import Array "mo:base/Array";
import Result "mo:base/Result";
import 宣言を見ると, mo:
前置子を付けることで, Motoko モジュールとして識別していること, 宣言にはファイル拡張子の .mo
は付けていないことが分かりますね.
Notice that the import declaration includes the mo:
prefix to identify the module as a Motoko module and that the declaration does not include the .mo
file type extension.
上の例では, 識別子パタンを用いてモジュール全体をインポートしていますが, オブジェクト・パタンの構文を用いれば, シンボルの部分集合だけを選択的にインポートすることもできます:
Above example uses an identifier pattern to import modules wholesale, but you can also selectively import a subset of symbols from a module by resorting to the object pattern syntax:
import { map, find, foldLeft = fold } = "mo:base/Array";
この例では, 関数 map
と find
を名前を変えずにインポートし, foldLeft
関数を fold
としてインポートしています.
In this example, the functions map
and find
are imported unaltered, while the foldLeft
function is renamed to fold
.
Motoko でプログラムを書くときの別のやり方として, ソース・コードを複数のモジュールに分割するやり方があります. 例えばアプリケーションを次のようなモデルを用いて設計します:
Another common approach to writing programs in Motoko involves splitting up the source code into different modules. For example, you might design an application to use the following model:
main.mo
ファイルにはアクタと状態を変える関数を入れる
types.mo
ファイルには自前の型定義を全部入れる
utils.mo
ファイルにはアクタの外で使う関数を入れる
a main.mo
file to contain the actor and functions that change state.
a types.mo
file for all of your custom type definitions.
a utils.mo
file for functions that do work outside of the actor.
このシナリオでは, この三つのファイルを全部同じディレクトリに置いて, 必要なときに使えるようにローカル・インポートします.
In this scenario, you might place all three files in the same directory and use a local import to make the functions available where they are needed.
例えば, main.mo
には以下の行を入れて, 同じディレクトリ内のモジュールを参照します:
For example, the main.mo
contains the following lines to reference the modules in the same directory:
import Types "types";
import Utils "utils";
これらの行では, モジュールは Motoko ライブラリからではなく, ローカル・プロジェクトからインポートするので, インポート宣言では mo:
前置子は使いません.
Because these lines import modules from the local project instead of the Motoko library, these import declarations don’t use the mo:
prefix.
この例では, type.mo
ファイルも utils.mo
ファイルも main.mo
ファイルと同じディレクトリにあります. 個々でも .mo
後置子は使っていません.
In this example, both the types.mo
and utils.mo
files are in the same directory as the main.mo
file. Once again, import does not use the .mo
file suffix.
他のパッケージやローカル・ディレクトリ以外のディレクトリからインポートすることもできます.
You can also import modules from other packages or from directories other than the local directory.