まくまくいろいろノート
プロジェクト内での null の扱い方をルール化する
2015-09-16

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
2015-09-16