昨日はファイルに書いたElixirのコードをコンパイルして.BEAMファイルが出力されることまでは確認した。
コンパイルするとバイトコードのこととかデコンパイルできるんだろうかとかいろいろ気になってくる。
たぶん長くなるので、今日は少し観点を変えて関数プログラミングのコードを試してみることにする。
男性プログラマ必見!今どきのダサいコードはコレだ!
巷の女子高生の間では以下のようなコードはダサいとされているらしい。
#include <stdio.h> int main(int argc, char **argv) { int s = 0; for (int i = 0; i < 10; i++) { s = s + i; } printf("%d\n",s); }
これは噂だが、こんなコードを書いていると
「ずいぶんとダサいコードを書いているのね。あなたの偏差値でも計算してみたの?」
と女子高生に話しかけることがあるらしい。
毎日こんなコードしか書いていないのに、ここ32年くらい女子高生から話しかけられたことがないのでにわかに信じられないが。
仮に話しかけられた場合、
「いや、これは0から9までの合計を求めるコードでして・・・それに、僕の偏差値は片手で数えられるから計算とかいらなくて、それより、あの、よかったら・!?」
と必死で説明している間に女子高生は去っていくだろう。
ナウでヤングなださくないコードはこれだ!
ダサくないコードが書ければ、女子高生も一目おいてくれて、もしかしたら一緒にあんなことやこんなことができるようになるかもしれない。
ダサくないコードは、C言語では簡単に書けなくてJavascriptだと
var plus = function(a,b) { return a + b; } var s = [0,1,2,3,4,5,6,7,8,9] .reduce(plus); console.log(s);
のようなコードになるらしい。
Chromeを立ち上げてF12を押して、Consoleタブでコードを書けば完成する。
そんなことより、僕にとってはJSなんかどうでもよくてJKの方が重要だ。
Elixirで書くダサくないコード
ダサくないコードが書ければきっといいことが待っていると信じて、Elixirでのダサくないコードの書き方を勉強してみた。
もし女子高生に話しかけられた場合は、こんな感じで見せるつもりだ。
「ちょっと待ちなお嬢さん、ずいぶんと長いコードを書いているんだね。それとも長いのが好みかい?」
そしてコードを見せる。
IO.puts(Enum.reduce([0,1,2,3,4,5,6,7,8,9], 0, fn(a,b) -> a + b end))
「えっ!?どうして」
「君もJavascriptが好きならこう書くべきだよ。」
console.log([0,1,2,3,4,5,6,7,8,9].reduce(function(a,b){return a+b;}));
「やだ、すごく短いわ・・・こんなの初めて!あら、なんかわたしコードに酔っちゃったみたい」
「そうか、すぐそこにホテルがあるようだ。すこし休憩した方がいいだろう (⌒~⌒)ニンマリ」
関数定義
Elixirによる関数定義は、
fn(引数) -> 処理 end
で無名関数が定義できるらしい。
ちなみにElixirのソースコードのインデントはrubyと同じで2カラムが普通らしい。
fnは定義した関数そのものを返すので
hoge = fn(a, b) -> a + b end hoge.(1,2)
とすれば定義した関数が呼び出せる。
無名関数呼び出しは
関数名.(引数)
のように . (ドット)がいるみたいで、名前付き関数というものだとどっとはいらないらしい。
あまり見慣れない構文だが、まだ勉強していないからよくわからないなにか理由があるんだろう。
今日はこれくらいにして終わる。
余談
女子高生のくだりは言うまでもなく「関数型プログラミングに目覚めた」へのオマージュです。
ヒロインの美人女子高生が関数型プログラミングについて親切に説明してくれて、自分がこの娘と二人っきりで部室でコードを書いてるような錯覚を味わうことができます。
関数型プログラミングに目覚めた!IQ145の女子高校生の先輩から受けた特訓5日間
- 作者: 岡部健
- 出版社/メーカー: 秀和システム
- 発売日: 2015/04/22
- メディア: 単行本
- この商品を含むブログ (7件) を見る
ちなみにこの本の表紙には、本のヒロイン役の女子高生とおぼしきかわいい女の子が短いスカートとニーハイを履いている絵が描いてあります。
下からみればスカートの中が見えるかなと思って何度も角度を変えて見てみましたが、残念ながら見えませんでした。
見えないようにスカートに特別な仕掛けでもしてあるんだろうか・・・
いつかこんな女の子と出会える日が来ることを信じてとりあえずElixirの勉強を頑張ろう。