LoginSignup
33
20

More than 5 years have passed since last update.

Elixir Zen スタイルプログラミング講座

Last updated at Posted at 2019-05-09

はじめに

みなさん,Elixir Zen スタイルでプログラミングしていますか?

え,「Elixir Zen スタイルって何?」ですと?!

そんな流行に乗り遅れている貴方,このプレゼンテーションを聴衆とともに笑いながら見てください!

Lonestar ElixirConf 2019 - Hastega: Challenge for GPGPU on Elixir - Susumu Yamazaki

英語はどうしても嫌だ!という人は,次のプレゼンテーションをどうぞ

WSAに最適化された並列処理系

というわけで,Elixir Zen スタイルを推し進めると,次のような良いことがあります!

  1. 再帰スタイルで書くよりも,プログラムがとっても読みやすくなります。
  2. 今私たちが頑張って実装している Hastega が実用になると,最速で実行してくれるようになります。

これが「魔法による禅と侍の調和」すなわち「侘び寂び」です。なんのことかわからない人は,前述の英語プレゼンテーションを見てくださいね!

というわけで,この記事では,Elixir Zen スタイルの数々のプログラム例を紹介します。2019年5月3日からほぼ毎日のように連続ツイートしているので,見てやってください。

Enum.reduce って何をしているの?

Enum.reduce([1, 2, 3], 0, fn x, acc -> M.func(x, acc) end)

0 # 第2引数
|> M.func(1) # 第3引数の関数
|> M.func(2)
|> M.func(3)

Enum.reduce/3 と Enum.map/2 の組合わせ

[1, 2, 3]
|> Enum.map(& &1 * 2)
|> Enum.reduce(0, fn x, acc -> x + acc end)

Elixir プログラミングでかっこが多重になりそうなときに,どうしたらいいか?

第1引数の中にカッコを書きたくなったら,パイプライン演算子を使え!

Enum.reduce(Enum.map(...), 0, fn x, acc -> end)
Enum.map(...)
Enum.reduce(0, fn x, acc -> x + acc end)

複数のリストの各要素ごとに積をとりたい

Enum.zip([1, 2, 3], [4, 5, 6])
|> Enum.map(& Tuple.to_list(&1))
|> Enum.map(& Enum.reduce(&1, 1, fn x, acc -> x * acc end)) 

長いリストを決められた個数ごとに分割したい

1..24
|> Enum.chunk_every(4)

To be continued...

33
20
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
33
20