[Erlang][Elixir]if condition in Erlang/Elixir

昨夜のElixirのifの使いかたに対しての話に参加して。メモ。

Elixirのifって、以下の通りcaseから構成されるmacroとしてKernelに定義されているのですよね。nilfalseに一致したら else を行い、それ以外は if を行うと言う。

そして、これはErlangのifとは意味合いが異なります。Erlangの if はElixirで言う cond do ... end です。

http://elixir-lang.org/crash-course.html#if
(20160503現在)

なので、Elixirにおけるifって、Rubyといったifが条件分岐として普通な他言語から移ってくる分には良いけれど、Erlang Elixirの互換性な世界では少し混乱をもたらしてしまいます。私は若干混乱しました。。。なので、Elixirでは個人的にはifはほとんど使わない。必要になるときはパターンマッチで切り出すとか考えます。ちなみに else if とかな書き方はできなくて、その場合は当然 case ですね。

これを冗長というかどうかはそれを実装する人たちの合意形成にお任せする形になると思いますが、個人的には少し道からそれた使い方になるので必要以上に不具合つくり込みそうな感じもしています。(とはいえ、true/falseの条件分岐を短く書くというだけで言うと、短期的には有用ではあるかもしれません。)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中