今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

nullを返してはいけない理由

元ネタはこちらとのこと。
オブジェクトの状態を見たいときに null が返されるのは確かに良くない。モデルのバグだというのはごもっとも。アクセサを作った方がいいという意見にも同意する。
でも、アクセサ作っても事態はあまり改善しなかったりする。isHogeGettable() == false のときに getHoge() したらどうよ。やっぱり null を返すか例外を投げるかしかない。事前にアクセサでチェックしてくれない、おばかなクライアントも存在するのだ。
じゃあ、どう実装するか。オブジェクトが存在しない場合があり得るなら return null; はアリ。存在しない場合があり得ないなら例外を投げるのが適切なんだと思う。
例外を投げる場合は、理想的には、getHoge() throws HogeException (RuntimeException ではない)としておくのがよい。そうすればクライアントに例外処理を強制できる。
でもでも現実的には、新しく例外クラスを作る手間も惜しいし、getHoge() するときにいちいち try/catch ブロックにする手間が惜しいんで 多くの場合は RuntimeException で妥協する(^^;。NullPointerException よりはちっとはマシ、な程度にしかならんけど。(もちろんメソッド呼び出しの大元は try/catch ブロック内に書く)
結局そのコードって、getHoge() 内で assert 書いて、どっかで AssertionError を catch するのとたいして変わらなかったりする。