笑劇のNullチェック(論理演算での初歩の初歩のミス)
Android開発をポチポチとやっておりまして、そうすると幾つかクラッシュ情報などが挙がってきます。
その中で今回は自分のバグを生んだ爆笑出来るコードを晒してみる。
皆さんはそれを見て嘲笑ってください。
まず今回問題となったコードですがtimer処理を行なうもので、ユーザのボタンクリックに合わせてtimerを一々止めるというものでした。
で実際に合ったコードが以下のようなものでした。
@Override public void onClick(View v) { ..... if(usingTimer || timer != null){ timer.cancel(); //ここでヌルポ発生 timer = null; } ...... }
上の条件式見てあれっ?これNullチェックしてるじゃん?とか思ったのですが、
「Nullチェックすり抜けた・・・。これは・・・どうしたらいいんだ?」
と、思考停止しかかったのですが、
「んなこたぁない。チェック方法が間違ってるんじゃない」
と言われもう一度見てみると。
論理演算子が and(&&)じゃなくて or(||)になってる・・・キャ (/∀\)
つまりusingTimerがtrueだった場合後ろがNullだろうとそうでなかろうと実行されてしまうわけでw
もうね、気がついた時には吹いてしまった。
正しくは
@Override public void onClick(View v) { ..... if(usingTimer && timer != null){ timer.cancel(); //もう何も怖くない timer = null; } ...... }
ですね。
もう何回引っかかてるんだよ・・・。
もうミスらないため、ここに記述しておく。