Условный оператор - Conditional operator
В Условный оператор поддерживается во многих языки программирования. Этот термин обычно относится к ?:
как в C, C ++, C #, Python и JavaScript. Однако в Java этот термин также может относиться к &&
и ||
.
&& и ||
В некоторых языках программирования, например Java, термин условный оператор относится к логические операторы короткого замыкания &&
и ||
. Второе выражение оценивается только в том случае, если первого выражения недостаточно для определения значения всего выражения.[1]
Отличие от побитового оператора
&
и |
находятся побитовые операторы это происходит во многих языках программирования. Основное отличие состоит в том, что поразрядные операции работают с отдельными битами двоичного числа, тогда как условные операторы работают с логическими операциями. Кроме того, всегда будут оцениваться выражения до и после побитового оператора.
если (выражение1 || выражение2 || выражение3)
Если выражение 1 истинно, выражения 2 и 3 НЕ будут проверяться.
если (выражение1 | выражение2 | выражение3)
Это проверит выражения 2 и 3, даже если 1 уже истинно.
Операторы короткого замыкания могут сократить время выполнения, избегая вызова более поздних функций. Они также могут избежать исключения Null Exception, если выражение 1 проверяет, действителен ли объект.
Использование в Java
учебный класс ConditionalDemo1 { общественный статический пустота главный(Нить[] аргументы) { int значение1 = 1; int значение2 = 2; если ((значение1 == 1) && (значение2 == 2)) Система.из.println("значение1 равно 1 И значение2 равно 2"); если ((значение1 == 1) || (значение2 == 1)) Система.из.println("значение1 равно 1 ИЛИ значение2 равно 1"); }}
?
В большинстве языков программирования ?: называется условным оператором. Это тип тернарный оператор, в то время как тернарный оператор в большинстве случаев означает специально ?: , потому что это единственный оператор, который принимает три операнда.[2]
Регулярное использование "?:"
?:
используется в условных выражениях. Программисты могут более кратко переписать выражение if-then-else, используя условный оператор.[3]
Синтаксис
условие ? выражение 1 : выражение 2
условие: выражение, которое оценивается как логический ценить.
выражение 1, выражение 2: выражения со значениями любого типа.
Если условие оценивается как истинное, будет вычислено выражение 1. Если условие оценивается как ложное, выражение 2 будет оценено.
Его следует читать так: «Если условие истинно, присвоить результату значение выражения 1. В противном случае присвоить значение выражения 2 результату».
Собственность ассоциации
Условный оператор является правоассоциативным, то есть операции группируются справа налево. Например, выражение формы? до н.э ? d: e оценивается как a? b: (c? d: e).[2]
Примеры по языкам
Ява
учебный класс ConditionalDemo2 { общественный статический пустота главный(Нить[] аргументы) { int значение1 = 1; int значение2 = 2; int результат; логический someCondition = истинный; результат = someCondition ? значение1 : значение2; Система.из.println(результат); }}
В этом примере, потому что someCondition верно, эта программа выводит на экран цифру "1". Используйте оператор?: Вместо оператора if-then-else, если он делает ваш код более читабельным; например, когда выражения компактны и не имеют побочных эффектов (таких как присваивания).
C ++
#включают <iostream>int главный() { int Икс = 1; int у = 2; стандартное::cout << ( Икс > у ? Икс : у ) << "больше двух". << стандартное::конец;}
Есть несколько правил, которые применяются ко второму и третьему операндам в C ++:
- Если оба операнда одного типа, результат будет того же типа.
- Если оба операнда относятся к арифметическому или перечислимому типу, выполняются обычные арифметические преобразования (описанные в разделе Стандартные преобразования) для преобразования их в общий тип.
- Если оба операнда относятся к типам указателей или если один является типом указателя, а другой является константным выражением, значение которого равно 0, выполняются преобразования указателя для преобразования их в общий тип.
- Если оба операнда относятся к ссылочным типам, выполняется преобразование ссылок для преобразования их в общий тип.
- Если оба операнда имеют тип void, общим типом является тип void
- Если оба операнда относятся к одному и тому же определяемому пользователем типу, этот тип является общим.[4]
C #
// условие ? первое_выражение: второе_выражение;статический двойной грех(двойной Икс) { возвращаться Икс != 0.0 ? Математика.Грех(Икс)/Икс : 1.0;}
Есть несколько правил, которые применяются ко второму и третьему операндам в C #:
- Если x имеет тип X, а y имеет тип Y, то
- Если неявное преобразование (неявное преобразование) существует из X в Y, но не из Y в X, то Y является типом условного выражения.
- Если неявное преобразование (неявное преобразование) существует из Y в X, но не из X в Y, то X - это тип условного выражения.
- В противном случае тип выражения не может быть определен и возникает ошибка времени компиляции.
- Если только один из x и y имеет тип, а оба x и y неявно преобразуются в этот тип, то это тип условного выражения.
- В противном случае тип выражения не может быть определен и возникает ошибка времени компиляции.[2]
JavaScript
вар возраст = 26;вар напиток = (возраст >= 21) ? "Пиво" : "Сок";консоль.бревно(напиток); // "Пиво"
Условный оператор JavaScript совместим со следующими браузерами:
Хром, Край, Fire Fox (1), Internet Explorer, Опера, Сафари, Android веб-просмотр, Chrome для Android, Edge Mobile, Firefox для Android (4), Opera для Android, Safari на IOS, Интернет Samsung, Node.js.[5]
Специальное использование в условной цепочке
Тернарный оператор является правоассоциативным, что означает, что его можно «связать» следующим образом, аналогично цепочке if ... else if ... else if ... else.[4]
Примеры по языкам
JavaScript
функция пример(…) { возвращаться condition1 ? значение1 : condition2 ? значение2 : condition3 ? значение3 : значение4;}// Эквивалентно:функция пример(…) { если (condition1) { возвращаться значение1; } еще если (condition2) { возвращаться значение2; } еще если (condition3) { возвращаться значение3; } еще { возвращаться значение4; }}
C / C ++
const двойной а = выражение1 ? а1 : выражение2 ? а2 : выражение3 ? а3 : /*иначе*/ а4;// Эквивалентно:двойной а; если (выражение1) а = а1; еще если (выражение2) а = а2; еще если (выражение3) а = а3; еще /*иначе*/ а = а4;
Специальное использование в выражении присваивания
условный оператор может дать L-значение в C / C ++, которому можно присвоить другое значение, но подавляющее большинство программистов считают этот стиль чрезвычайно плохим хотя бы из-за неясности техники.[6]
C / C ++
((фу) ? бар : баз) = черт;// эквивалент: если (фу) бар = черт; еще баз = черт;
Смотрите также
- ?:, условный оператор в компьютерном программировании
- Тернарная операция
- Побитовые операторы
- логические операторы короткого замыкания
- Оператор (программирование)
Рекомендации
- ^ «Операторы равенства, отношения и условные операторы (Руководства по Java ™> Изучение языка Java> Основы языка)». docs.oracle.com. Получено 2019-04-29.
- ^ а б c Билл Вагнер. "?: Оператор - Справочник по C #". docs.microsoft.com. Получено 2019-04-29.
- ^ "Оператор?: В Java". www.cafeaulait.org. Получено 2019-04-29.
- ^ а б микблом. «Условный оператор:?:». docs.microsoft.com. Получено 2019-04-29.
- ^ "DevDocs". devdocs.io. Получено 2019-04-29.
- ^ «Условный оператор». wiki.c2.com. Получено 2019-04-29.