Java のような null を簡単に扱える言語では、プロジェクト内で null の扱い方を統一しておかないと、NullPointerException
のような不具合が多発します(これが Java の大きな欠点ともいえます)。
一方で、C++ などには「参照」という NULL でないことを保証する仕組みが言語的に備えられています。
コード内に null チェックが多いとコードの見通しが悪くなるだけでなく、実行パフォーマンスも悪くなります。
言語として Java などを採用するプロジェクトでは、下記のように null の扱い方に関するルールを定めておきましょう。
パフォーマンスに問題がない場合は null フリーなコードを目指すことをお勧めします。
null の扱いに関するルールの例
- API ドキュメントに特に記載がない場合は 「パラメータには null を渡せない」 こととする
- null を渡せる場合は明確にドキュメントに記載し、どんな作用があるのか分かるようにすること
- メソッドの内部で不要なパラメータの null チェックをしないこと
- API ドキュメントに特に記載がない場合は 「null を返すのは禁止」 とする
- どうしても null を返さなければいけない場合は、必ずドキュメントやアノテーションで記載すること(null を返さない場合でも、アノテーションなどで表現しておくのが望ましい)
- リストや配列を返すメソッドは「null を返さずにサイズ 0 のオブジェクトを返す」こと(空リストを返すのか null を返すのかはドキュメントで明示すること)
- リスト以外のオブジェクトを返すメソッドでは「不用意に null を返さず Null Object を返す」ことを検討すること
- null を返さないことが分かっているメソッドの戻り値に対して、不要な null チェックをしないこと
アノテーションを利用する
例えば、Android では、@NonNull
や @Nullable
といったアノテーションが用意されており、パラメータの null の扱い、戻り値の null の扱いを明確に示すことができます。
- https://developer.android.com/tools/debugging/annotations.html