Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

みなさん,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...

zacky1972
北九州市立大学 国際環境工学部 准教授 / ナッジ社会実装研究センター センター長 / Elixir 推し / fukuoka.ex / Pelemay / ZEAM / Personal Vision Co-Creator / KK-SHiFT / 技術相談,共同研究依頼,進路相談,適職診断など,随時受付ます
https://zacky1972.github.io
fukuokaex
エンジニア/企業向けにElixirプロダクト開発・SI案件開発を支援する福岡のコミュニティ
https://fukuokaex.fun/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away