6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Elixirのif文ワンライナー

Last updated at Posted at 2021-08-07

#Elixirの勉強会 エリジョ に参加してきました。
・・・ジョではないですけど。(アバター美少女もいました)
https://elijo.connpass.com/event/218301/

使った資料はコチラ

私自身はRubyとRuby on Railsはそこそこやったことありますが、業務はjavaしか使ったことありませんし、Elixirはつい一昨日からはじめたばかりです。
昨年から名前だけは知ってたのですが・・・だってエリクサーとかフェニックスとか言われたら「えっ!?」って思うじゃないですか。思わないですか??(完全回復できるなって)
他には関数型言語であるってことくらいしか知りません。オブジェクト志向となにが違うの・・・。

とりあえず、こういう勉強会自体初めてで楽しかったですし、また次回のイベントにも参加してもうちょっとElixirやってみたくなりました。
私のようなElixirド素人どころかプログラマーらしきことをあんまししてない初心者SEでも、女子ですらなくても受け入れていただけたので楽しく勉強できれば誰でもOKぽいです。

次回はこちら→ Elixir女子部「エリジョ」 プログラミングElixir「第13章プロジェクトを構成する」しよう!

if文のワンライナーとキーワードリスト書き換え

公式チュートリアルより、以下のif文がワンライナーで書き換えできるとなっています。

iex> if true do
...>   1 + 2
...> end
3

iex> if true, do: 1 + 2
3

で、あれ??これって昼の勉強会でやった書籍資料でのマップの話ででてきたような・・・と試しにこんな書き方しても通ることがわまります。
うーん、なんとも見慣れないif文です。

iex> if true, [{:do, 1 + 2}]
3

iexでヘルプを見てみるとしっかり if/2 というマクロと定義されてて、引数2つ目にキーワードリストを使うと書いてあります、なるほど!上記の書き換えが可能なこともよくわかります。
下記(略)以降でワンライナーの書き方もきっちり出てきてます。
ちなみにifのあとの/2 は引数を2つとるという意味で関数名の後ろにつけて関数を区別するもので、Elixirの説明では頻出する様子。

iex> h if/2

                        defmacro if(condition, clauses)                         

Provides an if/2 macro.

This macro expects the first argument to be a condition and the second argument
to be a keyword list.
(略)

たとえば、if~elseについてもひとつのキーワードリストで扱えます。キーワードリストに書き換えてもちゃんとelseが評価されます。

iex> if false, do: :this, else: :that
:that

iex> if false, [{:do, :this}, {:else, :that}]
:that

次に公式チュートリアルの以下の書き換えです。

iex> if true do
...>   a = 1 + 2
...>   a + 10
...> end
13

iex> if true, do: (
...>   a = 1 + 2
...>   a + 10
...> )
13

が、こちらはどうもワンライナーではうまくいきません。if/2の第2引数としてキーワードリストとして受け取っている以上、なにか方法はありそうなものですが・・・。
たとえば単純に以下のような書き方をしても怒られます。まぁそりゃスペースでは無理ですよね。

iex(1)> if true, [{:do, (a = 1 + 2  a + 10)}]   
** (SyntaxError) iex:1:29: syntax error before: a

いろいろ試してみましたが、いまのところの理解では難しそうです。

まとめ

少なくとも単純なif文であればワンライナーで書けますよってとこで、よくある三項演算子みたいな感覚で使えばよさそうでしょうか。別にワンライナーじゃないと読みにくいってこともあんましなさそうだし趣味の世界な気もしますが、ちょっと発見が楽しかったってお話です。

6
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?