これは何
Javaでboolean型の変数のtrue
/false
比較を行う方法についてつらつらと考えたもの
発端
若手メンバーが書いたコードをレビューしていたら
boolean flag = true; : if(Objects.equals(flag, false)) { : }
というコードを見かけた。
処理としては間違ってはいないのだけど、boolean型なので
if(!flag) {
:
}
と書くように指導した。
値を比較する時は、Objects.equals(a, b)
を使うようにコーディングルールを設けていたので
深く考えずにそのままコピペしてしまったのだと思われる。
boolean値の比較について
boolean値の比較方法については、下記2種類の書き方についての議論がよく見られる。
//否定を!マークで示す if(!flag) { : } //!マークは見づらいので == false と書いてわかりやすくする if(flag == false) { : }
他に書き方はないものかと思案してみた。
まず、Objects.equals
を使う書き方。Boolean.TRUE
またはBoolean.FALSE
と比較することで見やすくはなっているが、
比較対象を明示してあげないといけないというのが煩雑に感じる。
if(Objects.equals(b, Boolean.TRUE)) { : } if(Objects.equals(b, Boolean.FALSE)) { : }
apache commons
を見ていたところ、BooleanUtils.java
にisTrue()
、isFalse()
というメソッドがあるのを発見した。
BooleanUtils (Apache Commons Lang 3.10 API)
if(BooleanUtils.isTrue(b)) { : } if(BooleanUtils.isFalse(b)) { : }
こうやって書いてみると、意外とわかりやすい気もする。
引数の型がBoolean
なので、b
の値がnull
でも安心である。
そもそも、true
/false
のどちらなのかを判定したいのに、null
という第三の可能性が起きうる時点で
プログラムに何か間違いがある可能性の方が大きいわけではあるが…。
まぁ標準でBoolean
型とか、Objects
クラスにisTrue()
やisFalse()
メソッドが生えてくれるのが一番わかりやすいので
いつか実装されないかなぁ。