Elixir-modules
Elixir-モジュール
Elixirでは、いくつかの機能をモジュールにグループ化します。 前の章では、Stringモジュール、Bitwiseモジュール、Tupleモジュールなどのさまざまなモジュールを既に使用しています。
Elixirで独自のモジュールを作成するには、 defmodule マクロを使用します。 私たちは def マクロを使用してそのモジュールの機能を定義します-
defmodule Math do
def sum(a, b) do
a + b
end
end
次のセクションでは、例のサイズが長くなるため、すべてをシェルに入力するのは難しい場合があります。 Elixirコードをコンパイルする方法と、Elixirスクリプトを実行する方法を学ぶ必要があります。
編集
モジュールをコンパイルして再利用できるように、モジュールをファイルに書き込むと常に便利です。 私たちは次の内容を持つmath.exという名前のファイルがあると仮定しましょう-
defmodule Math do
def sum(a, b) do
a + b
end
end
コマンド-* elixirc *を使用してファイルをコンパイルできます。
$ elixirc math.ex
これにより、定義されたモジュールのバイトコードを含む Elixir.Math.beam という名前のファイルが生成されます。 iex を再び起動すると、モジュール定義が使用可能になります(iexがバイトコードファイルと同じディレクトリで起動される場合)。 例えば、
IO.puts(Math.sum(1, 2))
上記のプログラムは、次の結果を生成します-
3
スクリプトモード
Elixirファイル拡張子 .ex に加えて、Elixirはスクリプト用の .exs ファイルもサポートしています。 Elixirは両方のファイルをまったく同じように扱いますが、唯一の違いは目的です。 .ex ファイルはコンパイルされるためのもので、.exsファイルは scripting に使用されます。 実行されると、両方の拡張機能がモジュールをコンパイルしてメモリにロードしますが、*。ex *ファイルのみが.beamファイルの形式でディスクにバイトコードを書き込みます。
たとえば、同じファイルで Math.sum を実行したい場合、次の方法で.exsを使用できます-
Math.exs
defmodule Math do
def sum(a, b) do
a + b
end
end
IO.puts(Math.sum(1, 2))
Elixirコマンドを使用して実行できます-
$ elixir math.exs
上記のプログラムは、次の結果を生成します-
3
ファイルはメモリにコンパイルされて実行され、結果として「3」が出力されます。 バイトコードファイルは作成されません。
モジュールのネスト
モジュールはElixirにネストできます。 この言語の機能は、コードをより良い方法で整理するのに役立ちます。 ネストされたモジュールを作成するには、次の構文を使用します-
defmodule Foo do
#Foo module code here
defmodule Bar do
#Bar module code here
end
end
上記の例では、 Foo と Foo.Bar の2つのモジュールを定義します。 2番目は、同じレキシカルスコープ内にある限り、 Foo 内で Bar としてアクセスできます。 後で、 Bar モジュールをFooモジュール定義の外に移動する場合は、フルネーム(Foo.Bar)で参照するか、エイリアスの章で説明したエイリアスディレクティブを使用してエイリアスを設定する必要があります。
注-Elixirでは、言語がすべてのモジュール名をアトムに変換するため、Foo.Barモジュールを定義するためにFooモジュールを定義する必要はありません。 チェーン内のモジュールを定義せずに、任意にネストされたモジュールを定義できます。 たとえば、 Foo または Foo.Bar を定義せずに Foo.Bar.Baz を定義できます。