(この記事は、「fukuoka.ex x ザキ研 Advent Calendar 2017」の16日目です)
昨日は @hisaway さんの「Elixirで2次元のリスト加算関数をつくる」でしたね。
#はじめに
今回はモジュールをファイルに書き込んでいこうと思います。
また、今回と次回の二回に分けてモジュールの勉強をしていきます。
#簡単な計算をしてみる
まずはdefmoduleを使って足し算、引き算、掛け算、割り算ができるファイルを作って実行していこうと思います。
ex1.exという名前で以下のファイルを作成しました。
defmodule Math do
def sum(a, b) do
a + b
end
def reminder(a, b) do
a - b
end
def product(a, b) do
a * b
end
def quotient(a, b) do
a / b
end
end
このファイルはelixircを使ってコンパイルできます。
コンパイルを行うとElixir.Math.beamというファイルが生成されました。
$ elixirc ex1.ex
iexを開始し実行していくと、足し算、引き算、掛け算、割り算とそれぞれの計算を行うことができました。
定義したモジュールは使えるようになっていました。iexが開始された時に同じディレクトリにあるバイトコードファイルは自動的に読み込まれるようです。
iex> Math.sum(1,2)
3
iex> Math.reminder(1,2)
-1
iex> Math.product(1,2)
2
iex> Math.quotient(1,2)
0.5
#スクリプトモードでの計算
先ほどとは違い.exではなく.exsでファイルを作成しました。
こうすることでコンパイル不要でスクリプティングに使われます。
defmodule Math2 do
def sum(a, b) do
a + b
end
def reminder(a, b) do
a - b
end
def product(a, b) do
a * b
end
def quotient(a, b) do
a / b
end
end
IO.puts Math2.sum(1, 2)
IO.puts Math2.reminder(1, 2)
IO.puts Math2.product(1, 2)
IO.puts Math2.quotient(1, 2)
結果は問題なくそれぞれ表示されました。
バイトコードファイルは作られず、メモリ内でコンパイル、実行が行われます。
$ elixir ex2.exs
3
-1
2
0.5
#まとめ
今回は基本的なファイルの作成やコンパイルなどをしてきました。
これからもう少し複雑なものも作っていきたいと思います。
次回は後半としてプライベート関数の定義などをしていきます。
明日は@zuminさんの「RubyMineにElixir Pluginを導入してみた」です。お楽しみに。