引数オブジェクトがあるメソッドを持つことを必須とするのなら

  • エントリタイトルはそのままコピペで持ってきたから紛らわしかったかな。別に煽る気はないし「一番の問題」だとも思ってない。
  • 「(静的型言語愛好者支援)」は最初「(静的型言語厨支援)」って書いてたんだけど、マズイかなと思って変えたのが逆に良くなかったか。
  • 静的型言語が優れてるとは別に思ってない。どっちでも|どうでも良い。
  • 確かに Ruby だと手がかりが何もないなぁ、ぐらい。
  • IDE やエディタって書いたけど、まず ruby -cw hoge.rb で炙りだされることを期待してる。
  • よく話題になって、「Ruby では型よりメソッドの有無が大事なのです」なんて答えが返されるので、大事なら目に付くところに書いたらいいじゃまいか? そうすればこれ以上文句が出ることもなかろう。
  • UnitTest があれば大丈夫ってのはその通り。

ぐらいか。


Ruby ではソースを見るか動かしてみないと、そのメソッドが引数オブジェクトがあるメソッドを持つことを期待してるかどうかはわからない。あるメソッドを必須とするなら、それは重要な情報なんだから、一目でわかっても良いのではないか?

log_puts(out, msg)

だったら(Ruby としては不細工だけど)、log_puts は out が puts を備えていることが必須だとする。それを知るには、ドキュメントを読むか、ソースを読むしかない。私的には読むのは厭わないのだけれど、「必須」って重要な情報だから、パッと見でわかるのが妥当だと思うんだけど。「必須」だし。Ruby はコンパイル要らずで素振りや UnitTest が簡単だから重要性が下がるとは思う。


そして、静的型言語*1ならば、クラスが指定されてるので、そのクラスのオブジェクトを放り込んでおけばメソッドがないっつーことはない。クラスって単位はすごく大雑把過ぎると思うけど。


考えを纏めようと思ったが、また連想ゲームみたいになったな。いつもどおり。
勝つ気はない。いつもどおりダベってるだけ。


あと、Design by Contract は使ったことないから言及できない。勉強すること多いなぁ。

*1:念頭にあるのはベタな C++, C#