覚書き: nullチェックが不要なコードを書く

Javaを使っているくせにあちこちでnullチェックをしていたところ、ヲイコラといわれてしまったのでメモです。(ご指摘ありがとうございます)

nullが入ってくるようなコードを書かない、が大原則だそうです。理由は、安全のため。

  • nullで初期化しない
  • null以外の戻り値にする
  • nullを返す標準ライブラリを使うときはラップする

また、nullチェックするにしても、場所の問題があります。

たとえば、トランプの札を場に出す前のチェックを書きたいとします。

    // 手札にある札かどうか、場に出せるか札かどうか、を調べていると思ってくださり
	if (hasCard(card) && checkSpace(space, card)) {
		return createLeadAction(space, card);
	}

こんな文脈でnullチェックをすると、なにやら妙な感じです。

	if (card != null && hasCard(card) && checkSpace(space, card)) {
		return createLeadAction(space, card);
	}

「cardはnullか」というチェックは、「cardは手札にあるか」「cardはspaceに出せるか」といったチェックと比べて、実装の詳細に寄り過ぎています。粒度、種類の異なるチェックを、1つの条件式に混ぜるのは、そもそも行儀が悪いです。

ここでは、cardにnullが入り込まないように、それ以前のコードで保護するべきなんですね。

なお、NullObjectの扱いについて(自分の中で)まだ確立していないので、参考になるコードを探し中です。