Javaでbooleanの排他的論理和の否定を書くよ!!
今日既存ソースを眺めてて、大したことではないのだけれど、ある箇所が目に留まりました。 簡単に言えば2つのオブジェクトが両方ともnullかまたは両方ともnullじゃない場合にエラーにする処理で、コードにすると以下のように表せます。
Object a = createSomeObject(); Object b = createSomeObject(); if ((a == null && b == null) || (a != null && b != null)) { // エラー処理 }
うーん、冗長(な気がする)!!
ここで、a == nullを命題A、b == nullを命題B、理想とする結果をXとしてまとめます。
A | B | X |
---|---|---|
TRUE | TRUE | TRUE |
TRUE | FALSE | FLASE |
FALSE | TRUE | FLASE |
FALSE | FALSE | TRUE |
すなわち「等しい」という「排他的論理和」の否定になるため、以下のように書き換えることができます。
Object a = createSomeObject(); Object b = createSomeObject(); if ((a == null) == (b == null)) { // エラー処理 }
...なんかわかりずらくなりました。 可読性とどっちを取るかって話ですね。