web-dev-qa-db-ja.com

Java iif関数と同等

質問は簡単です、Javaの有名なiifと機能的に同等のものがありますか?

例えば:

IIf (vData = "S", True, False)

前もって感謝します。

8
seba123neo
vData.equals("S") ? true : false

またはこの特定のケースでは、明らかに1つだけ書くことができます

vData.equals("S")
21
Adrian Smith

ええ、三元操作? :

vData.equals("S") ? true : false
5
sblundy

Java三項演算子とIIfの主な違いは、IIf両方戻り値と未戻り値を評価することです。三項演算子は、返された値のみを短絡して評価します。評価に副作用がある場合、2つは同等ではありません。

もちろん、IIfを静的Javaメソッドとして再実装することもできます。その場合、両方のパラメーターは、IIfと同様に、呼び出し時に評価されます。 。しかし、IIfと正確に一致する組み込みのJava言語機能はありません。

public static <T> T iif(boolean test, T ifTrue, T ifFalse) {
    return test ? ifTrue : ifFalse;
}

ifTrue引数とifFalse引数は、三項演算子を使用して、Javaで同じ型である必要があることに注意してくださいまたはこの一般的な代替手段を使用します。)

4
dkarp

ifは論理iffと同じです。

boolean result;
if (vData.equals("S"))
   result = true;
else
   result = false;

または

boolean result = vData.equals("S") ? true : false;

または

boolean result = vData.equals("S");

編集:しかし、変数を必要としない可能性が非常に高く、代わりに結果に基づいて行動することができます。例えば.

if (vData.equals("S")) {
   // do something
} else {
   // do something else
}

ところで、それを使用することは良い習慣と見なされるかもしれません

 if ("S".equals(vData)) {

違いは、vDataがnullであるということです。最初の例では例外がスローされますが、2番目の例ではfalseになります。どちらをしたいのか自問してみてください。

2
Peter Lawrey