覚書き: 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の扱いについて(自分の中で)まだ確立していないので、参考になるコードを探し中です。