4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

モジュールをファイルに書き込んでみる(前半)

Last updated at Posted at 2018-07-03

(この記事は、「fukuoka.ex x ザキ研 Advent Calendar 2017」の16日目です)
昨日は @hisaway さんの「Elixirで2次元のリスト加算関数をつくる」でしたね。

#はじめに
今回はモジュールをファイルに書き込んでいこうと思います。
また、今回と次回の二回に分けてモジュールの勉強をしていきます。

#簡単な計算をしてみる
まずはdefmoduleを使って足し算、引き算、掛け算、割り算ができるファイルを作って実行していこうと思います。
ex1.exという名前で以下のファイルを作成しました。

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でファイルを作成しました。
こうすることでコンパイル不要でスクリプティングに使われます。

ex2.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を導入してみた」です。お楽しみに。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?