Найдите Условный оператор в Викисловаре, бесплатном словаре. |
Условный оператор поддерживается во многих языках программирования . Этот термин обычно обозначается ?:
как в C, C ++, C #, Python и JavaScript. Однако в Java этот термин также может относиться к &&
и ||
.
&& и || [ редактировать ]
В некоторых языках программирования, например Java, термин условный оператор относится к логическим операторам короткого замыкания &&
и ||
. Второе выражение оценивается только тогда, когда первого выражения недостаточно для определения значения всего выражения. [1]
Отличие от побитового оператора [ править ]
&
и |
являются побитовыми операторами, которые встречаются во многих языках программирования. Основное отличие состоит в том, что побитовые операции работают с отдельными битами двоичного числа, тогда как условные операторы работают с логическими операциями. Кроме того, всегда будут оцениваться выражения до и после побитового оператора.
если ( выражение1 || выражение2 || выражение3 )
Если выражение 1 истинно, выражения 2 и 3 НЕ будут проверяться.
если ( выражение1 | выражение2 | выражение3 )
Это проверит выражения 2 и 3, даже если 1 уже истинно.
Операторы короткого замыкания могут сократить время выполнения, избегая вызова более поздних функций. Они также могут избежать исключения Null Exception, если выражение 1 проверяет, действителен ли объект.
Использование в Java [ править ]
class ConditionalDemo1 { public static void main ( String [] args ) { int value1 = 1 ; int значение2 = 2 ; if (( значение1 == 1 ) && ( значение2 == 2 )) System . из . println ( "значение1 равно 1 И значение2 равно 2" ); if (( значение1 == 1 ) || ( значение2 == 1 )) Система. из . println ( "значение1 равно 1 ИЛИ значение2 равно 1" ); } }
"?:" [ править ]
В большинстве языков программирования ?: Называется условным оператором. Это тип тернарного оператора . Однако тернарный оператор в большинстве ситуаций относится конкретно к ?: Потому что это единственный оператор, который принимает три операнда. [2]
Регулярное использование "?:" [ Править ]
?:
используется в условных выражениях. Программисты могут более кратко переписать выражение if-then-else, используя условный оператор. [3]
Синтаксис [ править ]
состояние ? выражение 1 : выражение 2
условие: выражение, которое оценивается как логическое значение.
выражение 1, выражение 2: выражения со значениями любого типа.
Если условие истинно, будет вычислено выражение 1. Если условие оценивается как ложное, выражение 2 будет оценено.
Его следует читать так: «Если условие истинно, присвойте значение выражения 1 результату. В противном случае присвойте значение выражения 2 результату».
Свойство ассоциации [ править ]
Условный оператор является правоассоциативным, что означает, что операции группируются справа налево. Например, выражение формы a? до н.э ? d: e оценивается как a? b: (c? d: e). [2]
Примеры по языкам [ править ]
Java [ править ]
class ConditionalDemo2 { public static void main ( String [] args ) { int value1 = 1 ; int значение2 = 2 ; int результат ; логическое someCondition = true ; result = someCondition ? значение1 : значение2 ; Система . из . println ( результат ); } }
В этом примере, поскольку someCondition истинно, эта программа выводит на экран «1». Используйте оператор?: Вместо оператора if-then-else, если он делает ваш код более читабельным; например, когда выражения компактны и не имеют побочных эффектов (таких как присваивания).
C ++ [ править ]
#include <iostream>int main () { int x = 1 ; int y = 2 ; std :: cout << ( x > y ? x : y ) << "большее из двух." << std :: endl ; }
Есть несколько правил, которые применяются ко второму и третьему операндам в C ++:
- Если оба операнда одного типа, результат будет того же типа.
- Если оба операнда относятся к арифметическому или перечислимому типу, обычные арифметические преобразования (описанные в разделе Стандартные преобразования) выполняются для преобразования их в общий тип.
- Если оба операнда относятся к типам указателей или если один является типом указателя, а другой является константным выражением, значение которого равно 0, выполняется преобразование указателя для преобразования их в общий тип.
- Если оба операнда относятся к ссылочным типам, выполняется преобразование ссылок для преобразования их в общий тип.
- Если оба операнда имеют тип void, общим типом является тип void
- Если оба операнда относятся к одному и тому же определяемому пользователем типу, этот тип является общим. [4]
C # [ править ]
// условие ? первое_выражение: второе_выражение;статический двойной sinc ( двойной x ) { return x ! = 0.0 ? Математика . Sin ( x ) / x : 1,0 ; }
Есть несколько правил, которые применяются ко второму и третьему операндам в C #:
- Если x имеет тип X, а y имеет тип Y, то
- Если неявное преобразование (неявные преобразования) существует из X в Y, но не из Y в X, то Y является типом условного выражения.
- Если неявное преобразование (неявное преобразование) существует из Y в X, но не из X в Y, то X является типом условного выражения.
- В противном случае невозможно определить тип выражения и возникает ошибка времени компиляции.
- Если только один из x и y имеет тип, а оба x и y неявно преобразуются в этот тип, то это тип условного выражения.
- В противном случае невозможно определить тип выражения и возникает ошибка времени компиляции. [2]
JavaScript [ править ]
var age = 26 ; var drink = ( возраст > = 21 ) ? «Пиво» : «Сок» ; консоль . журнал ( напиток ); // "Пиво"
Условный оператор JavaScript совместим со следующими браузерами:
Chrome , Край , Firefox (1), Internet Explorer , Opera , Safari , Android WebView, Chrome для Android , Гурт Mobile , Firefox для Android (4), Opera для Android, Safari на IOS, Samsung Интернет , Node.js . [5]
Специальное использование в условной цепочке [ править ]
Тернарный оператор является правоассоциативным, что означает, что его можно «связать» следующим образом, аналогично цепочке if ... else if ... else if ... else. [4]
Примеры по языкам [ править ]
JavaScript [ править ]
пример функции ( … ) { return condition1 ? значение1 : condition2 ? значение2 : condition3 ? значение3 : значение4 ; }// Эквивалентно: пример функции ( … ) { if ( condition1 ) { return value1 ; } иначе, если ( условие2 ) { возвращаемое значение2 ; } Иначе , если ( condition3 ) { возвращения value3 ; } else { возвращаемое значение4 ; } }
C / C ++ [ править ]
const double a = выражение1 ? a1 : выражение2 ? a2 : выражение3 ? a3 : / * иначе * / a4 ;// Эквивалентно:двойной а ; если ( выражение1 ) а = а1 ; иначе, если ( выражение2 ) а = а2 ; иначе, если ( выражение3 ) а = а3 ; else / * иначе * / a = a4 ;
Специальное использование в выражении присваивания [ править ]
условный оператор может дать L-значение в C / C ++, которому можно присвоить другое значение, но подавляющее большинство программистов считают этот стиль крайне плохим хотя бы из-за неясности техники. [6]
C / C ++ [ править ]
(( foo ) ? bar : baz ) = frink ;// эквивалент: if ( foo ) bar = frink ; иначе baz = frink ;
См. Также [ править ]
- ?: , условный оператор в компьютерном программировании
- Тернарная операция
- Побитовые операторы
- логические операторы короткого замыкания
- Оператор (программирование)
Ссылки [ править ]
- ^ «Равенство, реляционные и условные операторы (Учебники Java ™> Изучение языка Java> Основы языка)» . docs.oracle.com . Проверено 29 апреля 2019 .
- ^ а б в Билл Вагнер. «?: Оператор - Справочник по C #» . docs.microsoft.com . Проверено 29 апреля 2019 .
- ^ «Оператор?: В Java» . www.cafeaulait.org . Проверено 29 апреля 2019 .
- ^ a b микроблом. «Условный оператор:?:» . docs.microsoft.com . Проверено 29 апреля 2019 .
- ^ "DevDocs" . devdocs.io . Проверено 29 апреля 2019 .
- ^ «Условный оператор» . wiki.c2.com . Проверено 29 апреля 2019 .