Что значит ? и: do в логических выражениях?

Я думаю, что это общий вопрос программирования, но давайте предположим, что я задаю его для Java.

что делает следующее утверждение?

return a ? (b || c) : (b && c);

Я видел синтаксис с ? и : во многих темах на SO, этот конкретный я нашел в Проверить, истинны ли хотя бы два из трех логических значений

Но я не знаю, что они означают, и как их использовать, и я считаю, что это что-то очень полезное для меня.

Спасибо !


person user223150    schedule 04.06.2013    source источник
comment
Это краткое if-else заявление   -  person MadProgrammer    schedule 04.06.2013
comment
? : делает то же самое, возвращая значения boolean, как и с любым другим типом.   -  person Peter Lawrey    schedule 04.06.2013
comment
Так почему все здесь думают, что это дубликат того вопроса? Этот вопрос не имеет ничего общего с этим.   -  person Makoto    schedule 28.12.2013
comment
@Makoto должен был быть отмечен как дубликат Что такое оператор Java ?: и что он делает?, но я не думайте, что его стоит открывать повторно только для того, чтобы его можно было закрыть как дубликат другого вопроса.   -  person mu is too short    schedule 28.12.2013


Ответы (6)


Это условный оператор. Это означает что-то вроде:

condition ? value-if-true : value-if-false;

Итак, в вашем случае он возвращает b || c, если a истинно, и b && c, если a ложно.

person Carl Norum    schedule 04.06.2013
comment
Большое спасибо! Не могу поверить, что не смог найти такую ​​простую вещь в гугле, и был прав, это экономит мне как минимум 4 строчки кода :) - person user223150; 04.06.2013
comment
Технически это называется условным оператором - и оказывается, что это тернарный оператор (принимает три аргумента). - person Blorgbeard; 04.06.2013
comment
И действительны ли тернарные операторы для распространенных языков, таких как C, PHP, JavaScript и т. Д.? Я выберу твой ответ за 10 минут. - person user223150; 04.06.2013
comment
Да, насколько мне известно, он произошел от C. - person Carl Norum; 04.06.2013
comment
Спасибо @Blorgbeard. Сейчас редактирую. - person Carl Norum; 04.06.2013
comment
Википедия говорит, что это исходит от CPL. И они тоже называют его тернарным оператором. Я не знаю, где найти официальное имя. Есть ли где-нибудь спецификация Java? C определенно называет это условным оператором. - person Carl Norum; 04.06.2013
comment
@CarlNorum Можно ли сделать две вещи, если условие истинно или ложно с ternary ops? например, для condition ? do this and do that : do something else and something even more - person jaypal singh; 04.06.2013
comment
Я не знаю достаточно java, чтобы узнать, есть ли в нем оператор запятой. Да, вы, вероятно, можете делать больше, чем одну вещь. Почему бы просто не использовать _1 _ / _ 2_ в этом случае? - person Carl Norum; 04.06.2013

Это известно как тернарный оператор; это сокращение для блока if-else - вы можете погуглить, чтобы узнать больше.

Ваш пример эквивалентен

if (a) {
   return (b || c);
} else {
   return (b && c);
}
person johnd    schedule 04.06.2013
comment
Да, я искал это несколько дней. Я всегда пытаюсь упростить свой код, и этот оператор превращает эти 5 строк в 1 строку. Я люблю это ! Спасибо. - person user223150; 04.06.2013
comment
@ user223150 На самом деле меньше строк не означает более простой код. Если вы спросите меня, предложение if / else проще и читабельнее. Помещение тернарных операторов в тернарные выражения может превратиться в грязное испытание. - person ddmps; 04.06.2013

condition ? first statement : second statement

если условие истинно, то выполняется первый оператор, иначе второй оператор

person himanshu shekhar    schedule 04.06.2013
comment
казнен? так я могу также написать condition ? function1() : function2();? - person user223150; 04.06.2013

Это тернарный оператор, весь оператор расширяется примерно до следующего вида:

if a == true then
  if b == true or c == true then
    return true
else 
  if b == true and c == true then
    return true

Как говорится в вашей ссылке, гораздо более элегантный способ проверить, истинны ли по крайней мере 2 из трех логических значений при таком применении!

person Phil Parsons    schedule 04.06.2013

это условный оператор ... jst как if и else ....

e.g----

a<b ? 4 :5      where a= 2 and b=5

поскольку a меньше b .... тогда этот оператор вернет 4 ... иначе он вернет 5 ....

короче ... если ваше условие, то есть заявление раньше? правильно, тогда он возвращает 1-е значение ... т.е. оператор перед двоеточием ... иначе он возвращает 2-е значение ...

person usr    schedule 04.06.2013

Согласно вашему коду, вернуть? (b || c): (b && c);

Результат будет такой:

если a == true, то результат = b || c иначе результат = b && c

это тернарный оператор и используется в большинстве языков C, C ++, java, Javascript

person John    schedule 04.06.2013