Java эквивалент функции iif - PullRequest
8 голосов
/ 13 января 2011

вопрос прост, есть ли функциональный эквивалент известного iif в java?

Например:

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

Заранее спасибо.

Ответы [ 4 ]

21 голосов
/ 13 января 2011
vData.equals("S") ? true : false

или в данном конкретном случае, очевидно, можно просто написать

vData.equals("S")
5 голосов
/ 13 января 2011

ага, троичный оп ? :

vData.equals("S") ? true : false
3 голосов
/ 13 января 2011

Основное различие между троичным оператором Java и IIf состоит в том, что IIf оценивает и возвращаемое значение и невозвращенное значение, тогда как троичный оператор замыкает накоротко и оценивает только возвращаемое значение.Если в оценке есть побочные эффекты, они не эквивалентны.

Конечно, вы можете переопределить IIf как статический метод Java.В этом случае оба параметра будут оцениваться во время вызова, как и при IIf.Но нет встроенной функции языка Java, которая бы точно соответствовала IIf.

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

(Обратите внимание, что аргументы ifTrue и ifFalse должны быть одного типа вJava, либо с использованием тернарного оператора, либо с помощью этой универсальной альтернативы.)

2 голосов
/ 13 января 2011

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 равно нулю, в первом примере будет сгенерировано исключение, а во втором - false Вы должны спросить себя, что бы вы предпочли.

...