衝動が正しいものなら調整して実施。独りよがりでないかは要確認。

by tanabe on October 13, 2007

個人的には

この一行がどうにも読みにくくしている。
via 教えながら学ぶRuby: 言語を拡張したくなる衝動に関して
という程度の問題意識に対してオーバースペックな解法を取っている気がするなぁ。

この件については、意図がコードに反映されていない(Ruby に慣れていないと本当に必要なのかが読み取れない)というなら、

next if invalid?(r)
とかしてやれば済むだけの話だと思う。入力パラメータのバリデーションがしたいなら、バリデーションとして明示したほうがわかりやすいよ。という業務システムプログラマ脳の意見。

ただ、オープンクラスな Ruby だとこういうことが誰にでも可能で、いつどこでどういうプログラマが働いているかわからないと影響が大きいよね、という論点には異論ない。そして、多かれ少なかれ、これはコミュニケーションの問題だと思う。密なコミュニケーションが取れていないと言語によらずプロジェクトとしては同種のリスクを持つという意味では、そこをことさら言語の問題として取り上げる必要はないように思う。知らないうちにあっちのチームと仕様がずれてました!みたいな話と一緒じゃないかと。(ビジネス仕様は暗黙的に共用されるグローバル変数。あ、これも業務システム脳かも。)

たとえば今回みたいに

  • NilClass 拡張しようと思います。
  • 理由はこうです。
という話があれば、上記のような理由でぼくは反対するだろうから、それで問題ないんじゃないかなぁ。仮に NilClass が拡張されることになっても、それは(たとえば ActiveSupport のように)周知のことになるからやっぱり問題ないし。

参考リンク。
「Rubyのオープンクラスってば大規模ソフトウェアに不向きじゃない?」という話。