generated at
Elixirの関数
from 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 という糖衣構文を使ってブロックを定義する
ex
# 複数行 def hoge(n) do n + 1 end # 一行 def hoge(n), do: n + 1




overload的なことをパターンマッチを使って定義する
無名関数を一つの関数名でまとめて定義している感じ
ex
hogehoge = fn {:ok, file} -> "Read data: #{IO.read(file, :line)}" {_, error} -> "Error: #{:file.format_error(error)}" end



パターンマッチ
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のところには自作の関数は書けない?
組み込み関数や、演算子はいける
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))