C#リーダブルコード #09_bool型の判定

当サイトではアフィリエイト広告を利用しています。

リーダブルコード
Subway Station in Munich, Germany. Train coming in. Strong Motion Blur on Train and People, no recognizable Persons.

前回はbool型の判定方法に関して解説しましたが,今回も,bool型を判定する際の注意点を解説していきます。以前「否定の否定はしない」という感じのことをお伝えしていますが,今回はより詳しく,考えられるパターンを考察したいと思います。

BAD:無駄に否定系にしない:Trueじゃないとき

bool型は前回の解説の通り,bool型の変数単体で判定できるので,次のような書き方をすることはないとは思いますが,想定されるパターンの網羅ということで,こういった書き方はしないでおきましょうという意味で解説します。「!= true」という感じで,「Trueじゃないとき」という書き方は,「Falseの時」と同じ意味なので,無駄に否定形にしないようにしましょう。

//BAD:無駄に否定系にしない:Trueじゃないとき・・・は,しんどい。
if (_isNormal != true)
{
}

「Falseの時」を表現する場合は,次のように書けばOKですね。

if (!_isNormal)
{
    //GOOD:これでいい
}

BAD:否定の否定にしない1

「!= ture」よりさらに悪い例として,falseとの比較をNOTイコールで行う場合ですね。「!= false」という書き方は,「Falseではない時」というわけで,結局は「Trueの時」ということになるので,否定の否定となり,かなりわかりづらい書き方になりますよね。

//BAD:否定の否定にしない(ダメ!絶対!)
if (_isNormal != false)
{

}

この場合はTrueかどうかをチェックすればOKですね。

BAD:否定の否定にしない2

否定の否定でさらにわかりづらい書き方が次のようなケースです。

_isNormalを反転させて「!_isNormal」にした状態で「!=」の比較をしています。前述のケースと似ていますが,要するにこれも「Falseの時」ということになるので,(!_isNormal)という感じで,FalseかどうかをチェックすればOKですね。

//BAD:否定の否定にしない(ダメ!絶対!)
if (!_isNormal != true)
{

}

BAD:否定の否定にしない3

次のような書き方もやめましょう。ここまで来たら,解説する必要はないと思いますが,_isNormalの否定にたいして「!=」で比較し,さらに比較対象がFalseといわれると,本当に何をチェックしたいかわかりませんね。

//BAD:否定の否定にしない(ダメ!絶対!)
if (!_isNormal != false)
{

}

bool型はtrueかfalseのどちらかですので,どちらの結果を得たいのか,何を判定したいのか,ということが素直にわかる形で書きましょう。また,判定する項目が複数にわたるような複雑な場合は,前述したようにメソッド化の検討が有効です。