LoginSignup
18
28

More than 5 years have passed since last update.

【Java】 (list == null || list.size() == 0)でNULL/空チェックしている事が気に入らない

Last updated at Posted at 2019-01-29

注意!!

初心者向け + 個人的な意見多めな記事です。

動作環境

  • java 1.8.0_191

背景

コードレビューをしていて、たまに目にするのが、

        List<String> list = Listがreturnされる何かしらの処理メソッド;

        // NULLおよび空チェック
        if (list == null || list.size() == 0) {
        }

というListのNULL/空チェックを行っているコードです。

動作的には問題ありません。
しかし、あまり気に入らないので修正してもらうことがあります。
理由としては主に2つあります。

1つ目:ListがNULLになることがあるの?

まず、「何かしらの処理/メソッド」でlist変数をNULLにすることがあるのか確認してほしいです。

NULLにすることがあるのならば、そこの処理を修正したほうがいいです。

なぜ?

NullPointerExceptionとなる可能性を減らすためです。
また、呼び出し元のNULLチェックをなくすことができます。

もし、「何かしら処理/メソッド」が共通化しているなら、全ての呼び出し元でNULLチェックしなければなりません。
呼び出し元でNULLチェックしていなければ、NullPointerExceptionになるリスクが出てきます。

NULLを返すことがなかったら、メソッド呼び出し元はNULLが返ってくるケースを想定する必要がなくなります。
呼び出し元の実装が、すこ~~~し楽になります。

list内の要素をremove()removeAll() などを使って全削除するとか、
Collections.emptyList()などで、空リストを返すようにしましょう。

また、List宣言にfinalをつけることも得策です。
※ コメントにて教えていただきました。

2つ目:size == 0ではなく、isEmpty()を使ってほしい

これは個人的な趣味?意見?です。
list.size == 0ではなく、list.isEmpty() としてほしいです。

なぜ?

isEmpty()の中身はsize == 0じゃないか!!!」という意見もあると思います。
全くその通りです。
処理内容としては何も変わりません。

でも list.size == 0 より list.isEmpty() のほうが分かりやすくないですか…?
たぶんlist.isEmpty() のほうが、Javaプログラマじゃない人が見ても、「空かどうか確認してるんだな!」って分かりやすいのではないかと思います。

個人的な結論

NULLチェックは止めて、isEmpty()の空チェックのみにしてほしいです。
NULLチェックが不要になるように、「何かしらの処理/メソッド」でNULLを絶対に返さないように、空リストは返してもNULLは絶対に返さないこと。
size() == 0 より、isEmpty() のほうが可読性が高いと個人的に思うので、isEmpty() を使用すること。

        List<String> list = Listがreturnされる何かしらの処理メソッド;

        // 空チェックのみ
        if (list.isEmpty()) {
        }

「NULLチェックしてるつもり」コードに出会うこともある

たまに、下のように && で判定しているコードがありますが、NULLがきたらNullPointerExceptionになるので注意しましょう。

if(list == null && list.size() == 0){}

おまけ

どうやら新入社員研修で、(list == null || list.size() == 0)と教わったらしいです。
間違ってないけど………とモヤモヤしたので記事にしました。(どいうことだ

18
28
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
28