単純なif-elseよりもJavaでブール値を否定するより良い方法はありますか?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
単純なif-elseよりもJavaでブール値を否定するより良い方法はありますか?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
回答:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
。
--
演算子(実際には2つの++
演算子とともに2つ)を定義しますが、!!
演算子は定義しません。必要な場合-(-(integer))
は、2つの-
文字の間に空白を使用できます。ただし、空白に関係なく、!!
2つの!
演算子として解析されます。
theBoolean ^= true;
変数が4文字より長い場合、キーストロークが少なくなります
編集:Google検索用語として使用すると、コードは有用な結果を返す傾向があります。上記のコードはそうではありません。それを必要とする人のために、それはだビット単位のXORとしてここで説明します。
「明白な」方法(ほとんどの人にとって)
theBoolean = !theBoolean;
「最短」の方法(ほとんどの場合)
theBoolean ^= true;
「最も視覚的な」方法(ほとんど不確実)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
割り当て演算子は常に割り当てられたものを返すので、これはビット演算子を介して値を切り替え、次にメソッド呼び出しで使用される新しく割り当てられた値を返します。
C
間違いなくですが、Java
ブール値と整数を混在させることはできません(while(1)
Javaでは不可能など)。
ブールNULL値を使用し、それらをfalseと見なす場合は、次のことを試してください。
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
ブールNULL値を処理しない場合は、次のことを試してください。
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
メソッドシグネチャに意図が示されているため、これらは最もクリーンであり、!演算子、および簡単にデバッグすることができます。
使用法
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
もちろん、Groovyまたは拡張メソッドを許可する言語を使用している場合は、拡張を登録するだけで次のことができます。
Boolean b = false
b = b.toggle() // == true
Boolean
それをメソッド内で実際に切り替えます(ただし、多少あいまいです)。
この答えは、「java invert boolean function」を検索したときに出ました。以下の例は、特定の静的分析ツールが分岐ロジックのためにビルドに失敗するのを防ぎます。これは、ブール値を反転する必要があり、包括的な単体テストを構築していない場合に便利です;)
Boolean.valueOf(aBool).equals(false)
または代わりに:
Boolean.FALSE.equals(aBool)
または
Boolean.FALSE::equals
Boolean.FALSE::equals
少しラムダを書く代わりにマッピング関数に渡せるという事実が気に入っています
特に専門的なことを何もしていない場合は、常にUtilクラスを使用できます。例:クラスのプロジェクトからのutilクラス。
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
次に、Utilオブジェクトを作成します
Util u = new Util();
を何かを返すだけです。System.out.println( u.flip(bool) );
最終的に同じものを繰り返し使用する場合は、メソッドを使用します。特に、プロジェクト全体で使用する場合は、Utilクラスを作成します。しかし、業界標準は何ですか。(経験豊富なプログラマーは私を自由に修正してください)
クラスBooleanUtils
はブール値の否定をサポートします。このクラスはcommons-lang:commons-langにあります
BooleanUtils.negate(theBoolean)
前:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
後:
boolean result = isresult();
result ^= true;