Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

Elixirで遊んでみる(8)

12章は制御フロー。といっても、パターンマッチとガード説で制御フローの大半を作ってしまうので、Elixirでは登場頻度は低い。

ifは今までの構文と同じようにdo:を指定できる。さらにelse:も指定できる。 この構文の特徴をもう一度確認しておこう。

iex> if(true, [do: "hoge", else: "fuga"])
"hoge"

このように、ifは2つの引数を取る。1つ目が条件、2つ目はキーワードリストだ。else:はなくてもいい。

で、関数呼び出しの括弧は省略できる。最後の引数がキーワードリストの場合、リストの角括弧も省略できる。

iex> if true, do: "hoge", else: "fuga"   
"hoge"

さらにdo:はブロックのように書くシンタックスシュガーがある

iex> if true do                       
...>   "hoge"
...> else
...>   "fuga"
...> end
"hoge"

面白いね。

ついでに、Rubyと同じようにunlessもある。Rubyのunlessは後置で早期リターンに使うのが便利。 それ以外で使うと混乱しがち。特にunlessにelseを付けると大混乱しがち。 それを踏まえると、Elixirのunlessはどういうときに使うんだろう?

次はcond。true/falseを返す条件式を使って、if..elsif..elseみたいなことがしたいときに使う。 条件じゃなくて、パターンマッチで実行するコードを選びたければ、caseを使う。 この2つの文法はよく似てる。

Elixirには例外もある。raise "xxx"でメッセージと共にRuntimeErrorを起こせる。 まあ、あんまり積極的には使わないものらしい。