0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

コーディング中の警告解消時の注意点

Posted at

#はじめに

みなさん!コーディング時の警告はちゃんと解消してますよね?

ただ、「はいはいいつものやついつものやつ」とか「またこれねハイハイ」とか容易にソースを修正してませんか?

特にテストやらなんやら終わった後のクラスとかで「あれ?警告でてるじゃん、消しとこ」とかで軽い気持ちで修正しちゃったりとかありませんか?

その修正が思わぬ不具合につながるかもしれませんよ?

#まえおき

理解してる人はあたりまえの話なのでそこはあたたかい目で読んでいただければと思います

例を作るにあたり、いろいろ突っ込みどころがあると思いますがご容赦を・・・!

#ほんだい
極端な例ですが、例えばこんなclassがあったとします。

public class TestClass {

    TestClass() {

        hogeInt hogeInt = new hogeInt();

        ...

        if (特定の条件) {

            Log.d("TAG", "前");

            Boolean flg = hogeInt.getIntParam().equals(1);

            Log.d("TAG", "後");

            Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show();
        }

        ...

    }

}

class hogeInt {

    private Integer intParam = null;

    @Nullable
    public Integer getIntParam() {
        return this.intParam;
    }

    public void setIntParam(Integer intParam) {
        this.intParam = intParam;
    }
}

そして特定の条件内に入るのが極稀なケースだったとします。

ここでひとつPointなのですが、これを何もせずに実行した場合、

Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show();

実行される前にクラッシュします。
( hogeInt.getIntParam() はNull なのに equals を実行しようとしているので)

そして本題。

Boolean flg = hogeInt.getIntParam().equals(1);

こいつは警告として表示されます。
今回だと「’NullPointerException’を生成する可能性があります」ってやつですね。わりかしよく見かける部類の警告だと思います。

これをアプリ改良中に「あれ?ここ警告でてるからついでに修正しておこう」とか「そういえばたまにクラッシュ報告あるけどこいつかも」
といった軽い感じで何も考えずにソースを修正した場合

ソースがこう変化します

public class TestClass {

    TestClass() {

        hogeInt hogeInt = new hogeInt();

        ...

        if (特定の条件) {

            Log.d("TAG", "前");

            if (hogeInt != null) {
                Boolean flg = hogeInt.getIntParam().equals(1);
            }

            Log.d("TAG", "後");

            Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show();
        }

        ...

    }

}

今までクラッシュしていた部分をnullチェックでスルーする事によって後続が流れるようになり、めでたくサーバにTruncate文が投げられる事になりました。

ちなみに今回のお話は**警告は残しておいてもいいよ!**という事ではなく、小さな警告を消す場合でも慎重になれという事です。

何かしら修正を入れる場合、その一文だけを見ずに、全体の流れをちゃんと把握した上で修正しましょう!

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?