著作一覧 |
るびま50号が出ました。50というのは10進数ではすごくキリが良い数なのでまずは祝着。
50号のプレゼントコーナーでは、僕が監訳したEffective Rubyが対象です。
読みたいけど買うまでもないという方や、買って読んでほかの人(同僚、友人、同級生とか)にも読ませたいけど自分の買ったのを貸す気にはなれないという方は、振ってご応募ください(5/31締切です)。
で、書籍紹介ページでも取り上げていただいているのですが、1点、筆者が何考えているかは別として、良く気持ち悪いと指摘される点(このページのtakkanmさんもそうですが)について説明します。
それは、筆者のサンプルコードはrequireにカッコをつけてrequire("foo")
のように書いている点です。
理由は読めば明らかですが、筆者はメソッド呼び出しにカッコを付けることを推奨しています。カッコを付けることで結合優先順の違いによる予想もしない結果を防ぐというのが理由です。
これは相当妥当な判断で、演算子の結合ですら、(4 + 3)/8(2 + 1)(忘れちゃったけど、ちょっと前に話題になった)とか書かれると間違える人が続出するくらいなので、ましてRuby以外ではそれほど例がないメソッド呼び出しのカッコ省略時の引数の結合優先順を調べて覚えるくらいであれば、最初からカッコを付けることで省エネすべしというわけです。
結果として筆者は原則に実に忠実というか、自分が書いたことに誠実で、本書に出てくるあらゆるメソッド呼び出しにカッコを付けているわけです。すると当然、requireもKernelのメソッドなのでカッコを付けることになります。
なお、誰もそう書かないとは思いますが、puts 'duplicate require for foo' unless require('foo')
と書けるくらいに、requireは値を返すメソッド呼び出しです。
ではなぜ、カッコを省略したくなるか考えると、Cのプリプロセッサディレクティブの#includeや、C#のusingやJavaのimportステートメントと、同じように扱いたくなる(書きたくなる)から(あるいは、そう考える人が作ったソースを読んでお手本にしてきてしまったから)でしょう。僕はそうです(いや、僕はカッコは省略する派なのでまた違うか)。
というわけで、requireのカッコについては筆者の誠実さの表れであると読むべきでしょう。
Kindle版も出ているので、そっちを貼っておこう。
ジェズイットを見習え |