Условный оператор - 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 ++

((фу) ? бар : баз) = черт;// эквивалент: если (фу)		бар = черт; еще		баз = черт;

Смотрите также

Рекомендации

  1. ^ «Операторы равенства, отношения и условные операторы (Руководства по Java ™> Изучение языка Java> Основы языка)». docs.oracle.com. Получено 2019-04-29.
  2. ^ а б c Билл Вагнер. "?: Оператор - Справочник по C #". docs.microsoft.com. Получено 2019-04-29.
  3. ^ "Оператор?: В Java". www.cafeaulait.org. Получено 2019-04-29.
  4. ^ а б микблом. «Условный оператор:?:». docs.microsoft.com. Получено 2019-04-29.
  5. ^ "DevDocs". devdocs.io. Получено 2019-04-29.
  6. ^ «Условный оператор». wiki.c2.com. Получено 2019-04-29.