1. OverView
どもども、うん、アドベントカレンダーの完走賞狙いなんだ、すまない。
チートシート19日分書いたから、あとはこつこつ書くだけだね。
解説の文中のサンプルの話をしたいと思います…もっともこれ、結論がないのです。
2. 本文
Elixir Schoolの記事、一文にすっごく味があって、俺なりにコピペで「こう解釈したのだ」と書き飛ばして
見たのだけど、当初の不満は、「作例に見たこともない機能が出てくること」
これ、最初は学習順を整理すれば、何とかなると思ってたんだよね。でも、そこで起こるのは苦痛なだけなんですわ。
今回、最後にシジルを持ってきたのだけど、そこまでの例でも使ってる、でも、シジルがないと、以下の様に一般的ではない書き方となる。
iex(11)> ~s/hello #{greeting_target}/
"hello world"
iex(12)> "hello " <> greeting_target
"hello world
うーん、文字列の結合を最初に説明しているとは言え、後者が連発して例として読みやすいか?
Elixir Schoolのサンプルの様に「説明していない機能でも、Elixirの書き方に沿った例に入れる」方が結果的に
よくないか?と言う結論に至りました。
3 蛇足
世間で言うラムダ式が複雑だから、レビューが通らない、と言う誤解も、ここら辺から来ると思うなぁ。
ElixirでEnum.mapのサンプルとなります。
iex(23)> Enum.map([0, 1, 2, 3], fn(x) -> x * 5 end)
[0, 5, 10, 15]
iex(24)> Enum.map([0, 1, 2, 3], &(&1 * 5))
[0, 5, 10, 15]
iex(25)>
気を付けるべき点は「関数を引数に取る」「無名関数がその場で定義する」なんだよね。
これ、他の言語に書き直してみましょうか?…うん、C言語にlistないから、許して。
for( i = 0, ; i < 4; i ++) {
x = i * 5;
pos = strlen(newlist);
sprintf(newlist[pos], "%d,", x)
}
動くかな…心配になって来たwまぁこれ、Cのプログラマなら反射で書けるわ。
肝は、フローチャートのレベルで書けば普通の処理なのに、なぜかEnum.map([0, 1, 2, 3], fn(x) -> x * 5 end)を
特別なものの様に説明してしまった間違いだと思うんだよね。
説明としては、
LISTの各要素を5倍したい。
各要素に対して処理を行うEnum.mapは、引数に取り出した各要素を処理する関数をとる。今回は処理が簡潔であり、再利用しない
ため、引数は通常の変数は定義せずに、無名関数fn(x) -> x * 5 endを定義した。
…とでも説明すれば、レビューが可能に思うなぁ。
数度説明すれば、以降は同じ、で済むでしょう。
どうだろ?SIerでレビューを担当する同志諸君?納得してくれそう?
あ、大河大長編無名関数とか書く阿呆は…ドツケw