2014年10月12日日曜日

カッコつけないことがカッコいいと考えてるプログラマの痛さ

Redmineのプログラムに手を入れるようになって知ったのだが、Rubyというのは関数であれサブルーチンであれ呼び出しに()つけなくていい言語らしい。

で、HubotのためにCoffeeScriptをチョボチョボと書いていますが、この糖衣言語はRubyプログラマに好かれているらしく、そのせいか同様に()つけなくていい。

そりゃ確かに()は打つのめんどいよねえ。わかるよ~。ということで僕も倣ってみた。
これがほんとのカッコつけないコーディングスタイルである。

だけど、メソッドチェーンとか関数入れ子のときは引数の具合によっては結局()つけなきゃいけない。
単純に引数ないときもつけなきゃいけない。
ぐにゅ。
プログラムが複雑になってきたら、これがバグの温床となっている気がする今日このごろである。
↑などと書く理由は、ご明察のとおり、数日前にそこでみずから実際にハマったからである。初心者さんホイホイの穴へ見事にいらっしゃ~いなカンジ!

カッコいかに付けないかを競うプログラマーとかいそうで、いたら痛い。
んなことより、プログラムが確実に動くことや、後で見やすいことを目指せよとおもう。

むかし業務でげしげし書いていたVisual Basicでは、関数には()必須で、サブルーチンには()つけないでいいことになっていた。たしかに、サブルーチン(としてプロシージャを呼び出す)ならばメソッドチェーンとか関数入れ子はありえないわけで、実は最も合理的な言語仕様かもしれない。

CoffeeScriptで引数ないときに()つけないといけないのは、そうしないと関数というオブジェクトを指すことになってしまうからだが、人間としたら、俺が動詞1個発したら、そこは素直に命令文と受け止めてくれよとおもうのが人情ではないだろうか。

「その動詞というオブジェクトですね!」
とか、
「その動詞への参照ですね!」
とか、
「その動詞へのポインタですね!」
なんてシチめんどくさい答え返すヤツは、現場で生き残れないのではないだろうか。

"Freeze!"
と言われて、
「はい、ご注文のfreezeという動詞への参照をご用意しました。お持ち帰りですか? こちらでお召し上がりになりますか?」
などと答えるヤツは、俺だったら撃ってしまいたい。

その動詞による命令よりも、その動詞というオブジェクトを指すほうが、より抽象的な、間接的な伝達内容なのだから、符号化理論的に言って、より表記が複雑であるべきだ。C#はそのようになっている。

逆になっているのは僭越だと個人的に感じる。

などと、JavaScriptでサブルーチンから()を取ってしまってコンパイルエラー出した日曜の昼下がりにつらつら想うのでありました。

0 件のコメント:

コメントを投稿