[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の条件分岐を短く書くというだけで言うと、短期的には有用ではあるかもしれません。)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s