5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 3

Elixirチートシートを作ろう、番外編その3 解説の文中のサンプルの話

Posted at

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

5
0
0

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
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?