インターフェイスに null を想定することを禁止すること

matobaa さんのところから辿った先より。

http://c2.com/cgi/wiki?NoNullBeyondMethodScope
僕の英語の理解力が間違ってなければ、nullをメソッドの外に出すな!ということらしいです。んで、"if(xxx != null)"をbooleanのアクセッサに置き換える方法と、引数をチェックする方法が紹介されているようです。
つまるところは、nullを返すな!、nullを渡すな!って事ですね。ものすごく単純明快。

null の送出/混入の禁止規約は守られないので現実的にどうか?という話はありますが、気持ち自体は解ります。

で、null のかわりに NullObject あるいはそれに相当するものをやりとりするようになったとして、そのポリシーにかけるコストに見合ったコスト改善が成立するのか?というほうの問題もあったりしますね。

いずれの方式だったとしても、バグはバグ。NullObject が返されてはいけないような場面で NullObject が返される状況では、null が返されても何ら違いはないと思います。

その NullObject に実装された振る舞いがバグをバグであると明示できるように気を使って作られていないと、言ってみれば catch (Exception e) {} としているのと同じようにしかテスト時に見えなくなるという危険を持ち合わせていますね。

null を返却するなというスローガンでは不注意によるおかしな NullObject の発生を防げないのではないかなぁ、と思います。それならまだ NullPointerException の方がマシ、と。元の主張を細部まで見たわけでないので外してるかもですが^^;;。

(追記)
こっちの日記はメンテ適当だからいつ直すか解んないですが、どうもやっぱり文脈が違うみたい…?ちなみに if (obj.isValid()) なんてのは日常的にやります。