FM牛鍵屋本舗

プログラマ(弱)の日々精進系ブログ

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)) {
  // エラー処理
}

...なんかわかりずらくなりました。 可読性とどっちを取るかって話ですね。