はじめに
みなさん,Elixir Zen スタイルでプログラミングしていますか?
え,「Elixir Zen スタイルって何?」ですと?!
そんな流行に乗り遅れている貴方,このプレゼンテーションを聴衆とともに笑いながら見てください!
英語はどうしても嫌だ!という人は,次のプレゼンテーションをどうぞ
というわけで,Elixir Zen スタイルを推し進めると,次のような良いことがあります!
- 再帰スタイルで書くよりも,プログラムがとっても読みやすくなります。
- 今私たちが頑張って実装している Hastega が実用になると,最速で実行してくれるようになります。
これが 「魔法による禅と侍の調和」 すなわち 「侘び寂び」 です。なんのことかわからない人は,前述の英語プレゼンテーションを見てくださいね!
というわけで,この記事では,Elixir Zen スタイルの数々のプログラム例を紹介します。2019年5月3日からほぼ毎日のように連続ツイートしているので,見てやってください。
Enum.reduce って何をしているの?
Elixir の Enum.reduce が何をしているか,わからない人向けの連続ツイート,書くぜ! #fukuokaex
— Susumu Yamazaki (@zacky1972) 2019年5月3日
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)
言葉にすると,難しいと思うので,
— Susumu Yamazaki (@zacky1972) 2019年5月3日
0 # 第2引数
|> M.func(1) # 第3引数の関数
|> M.func(2)
|> M.func(3)
このイメージをどうぞ!
Enum.reduce/3 と Enum.map/2 の組合わせ
Enum.reduce/3 が何をしているか,理解しましたか? 今度は https://t.co/FpqjZ1GS28 と組み合わせてみましょう!
— Susumu Yamazaki (@zacky1972) 2019年5月4日
[1, 2, 3]
|> Enum.map(& &1 * 2)
|> Enum.reduce(0, fn x, acc -> x + acc end)
Elixir プログラミングでかっこが多重になりそうなときに,どうしたらいいか?
今回の連続ツイートでは,Elixir プログラミングでかっこが多重になりそうなときに,どうしたらいいか?を解説します。 #fukuokaex
— Susumu Yamazaki (@zacky1972) 2019年5月5日
第1引数の中にカッコを書きたくなったら,パイプライン演算子を使え!
今回の場合は ... の部分が第1引数にあるので,パイプライン演算子を使えば,次のようにかっこの外に追い出せます!https://t.co/GfdYKnkfmY(...)
— Susumu Yamazaki (@zacky1972) 2019年5月5日
|> Enum.reduce(0, fn x, acc -> x + acc end)
Enum.reduce(Enum.map(...), 0, fn x, acc -> end)
Enum.map(...)
Enum.reduce(0, fn x, acc -> x + acc end)
複数のリストの各要素ごとに積をとりたい
今日のお題:
— Susumu Yamazaki (@zacky1972) 2019年5月7日
[1, 2, 3] と [4, 5, 6] を各要素ごとに掛け算をして(積をとって),[1 * 4, 2 * 5, 3 * 6] すなわち [4, 10, 18] を計算するプログラムを書きましょう。#fukuokaex
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))
長いリストを決められた個数ごとに分割したい
今日のお題: 「長いリストを決められた個数ごとに分割したい」
— Susumu Yamazaki (@zacky1972) 2019年5月9日
こんな時は,Enum.chunk_every/2 を使います!#fukuokaexhttps://t.co/PEm25k63sM
1..24
|> Enum.chunk_every(4)