Elixirの関数
無名関数
sum = fn (a, b) -> a + b end
sum = fn a, b -> a + b end
withoutArg = fn -> 42 end
呼び出し
sum.(1,2)
無名関数のときのみ.が必要
withoutArg.()
引数がなくても()は必要
&記法
無名関数をさらに省略して定義できる
add = &(&1 + &2)
add = fn n1 n2 -> n1 + n2 endと同じ
add.(2,3)で呼び出す
&1は「第一引数」を表す
引数に名前を付けないんやな
名前付き関数
呼び出し
sum(1,2)
定義
do...endという糖衣構文を使ってブロックを定義する
code:ex
# 複数行
def hoge(n) do
n + 1
end
# 一行
def hoge(n), do: n + 1
無名関数を一つの関数名でまとめて定義している感じ
code:ex
hogehoge = fn
end
パターンマッチ
code:ex
defmodule Fact do
def of(0), do: 1
def of(n), do: n * of(n-1)
end
IO.puts(Fact.of(5))
ガード
whenを使って条件分岐できる
どのwhenも満たさない場合、例外が起きる?
whenのところには自作の関数は書けない?
組み込み関数や、演算子はいける
code:ex
defmodule Fact do
def of(0), do: 1
def of(n) when n > 0 do
n * of(n-1)
end
end
IO.puts(fact(5))