Вопрос прост, есть функциональный эквивалент знаменитого iif в java?Java Equivalent to iif function
Например:
IIf (vData = "S", True, False)
Спасибо заранее.
Вопрос прост, есть функциональный эквивалент знаменитого iif в java?Java Equivalent to iif function
Например:
IIf (vData = "S", True, False)
Спасибо заранее.
vData.equals("S") ? true : false
или в данном случае, очевидно, можно было бы просто написать
vData.equals("S")
** Особенно ** второй бит. Это не так очевидно для многих людей. –
Это не совсем то же самое. Использование 'IIF (x, y, z)' всегда будет оценивать 'y' и' z' (вызывающие побочные эффекты обоих видимых), а 'x?y: z' будет только убеждать 'y' xor' z' (вызывая только видимые побочные эффекты только одного). – Gabe
@Gabe: VB не поддерживает оценку короткого замыкания в целом. Хотя VB.NET делает – sblundy
, если одно и то же, как логическое тогда и только тогда.
boolean result;
if (vData.equals("S"))
result = true;
else
result = false;
или
boolean result = vData.equals("S") ? true : false;
или
boolean result = vData.equals("S");
EDIT: Однако его вполне вероятно, что вам не нужно переменную вместо этого вы можете воздействовать на результат. например
if (vData.equals("S")) {
// do something
} else {
// do something else
}
Кстати, можно считать хорошей практикой использовать
if ("S".equals(vData)) {
Разница в том, что это VDATA является недействительным первый пример сгенерирует исключение, в то время как второй будет ложным. Вы должны спросить себя, что бы вы предпочли.
спасибо за ответ. – seba123neo
Основное различие между тройным оператором 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, либо с трехзначным оператором или с помощью этой общей альтернативы.)
спасибо, я понимаю, похоже на функцию AndAlso, OrElse в VB NET, правильно? – seba123neo
Да, это еще один пример короткого замыкания. – dkarp
JJnguy: Нет, 'iif' является inline-if, которая принимает логическое значение в качестве своего первого параметра, а когда true возвращает второй параметр, а когда false возвращает третий параметр. – Gabe
Для потомков: обратите внимание, что принятый ответ на самом деле не является правильным в отношении короткого замыкания. Прочитайте http://stackoverflow.com/questions/822810/iif-equivalent-in-c вместо этого ... – dkarp