Условный оператор
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Wiktionary-logo-en-v2.svg/40px-Wiktionary-logo-en-v2.svg.png)
Условный оператор поддерживается во многих языках программирования . Этот термин обычно относится к ?:
как в C, C++, C# и JavaScript. Однако в Java этот термин также может относиться к &&
и ||
.
&& и || [ редактировать ]
В некоторых языках программирования, например Java, термин « условный оператор» относится к логическим операторам короткого замыкания. &&
и ||
. Второе выражение вычисляется только тогда, когда первого выражения недостаточно для определения значения всего выражения. [1]
Отличие от побитового оператора [ править ]
&
и |
— это побитовые операторы , которые встречаются во многих языках программирования. Основное отличие состоит в том, что побитовые операции работают с отдельными битами двоичного числа, тогда как условные операторы работают с логическими операциями. Кроме того, всегда оцениваются выражения до и после побитового оператора.
if ( выражение1 || выражение2 || выражение3 )
Если выражение 1 истинно, выражения 2 и 3 НЕ проверяются.
если ( выражение1 | выражение2 | выражение3 )
При этом проверяются выражения 2 и 3, даже если выражение 1 истинно.
Операторы короткого замыкания могут сократить время работы, избегая ненужных вычислений. Они также могут избежать нулевых исключений, когда выражение 1 проверяет допустимость объекта.
Использование в Java [ править ]
класс ConditionalDemo1 {
public static void main ( String [] args ) {
int value1 = 1 ;
целое значение2 = 2 ;
if (( значение1 == 1 ) && ( значение2 == 2 ))
System . вне . println ( "значение1 равно 1 И значение2 равно 2" );
if (( значение1 == 1 ) || ( значение2 == 1 ))
System . вне . println ( "значение1 равно 1 ИЛИ значение2 равно 1" );
}
}
"?:" [ редактировать ]
В большинстве языков программирования ?: называется условным оператором. Это тип тернарного оператора . Однако в большинстве ситуаций тернарный оператор относится именно к ?:, поскольку это единственный оператор, принимающий три операнда. [2]
Регулярное использование "?:" [ править ]
?:
используется в условных выражениях. Программисты могут переписать выражение if-then-else более лаконично, используя условный оператор. [3]
Синтаксис [ править ]
состояние ? выражение 1 : выражение 2
условие: выражение, которое оценивается как логическое значение.
выражение 1, выражение 2: выражения со значениями любого типа.
Если условие оценивается как истинное, будет оценено выражение 1. Если условие оценивается как ложное, будет оценено выражение 2.
Его следует читать так: «Если условие истинно, присвойте результату значение выражения 1. В противном случае присвойте результату значение выражения 2».
Свойство ассоциации [ править ]
Условный оператор правоассоциативен, то есть операции группируются справа налево. Например, выражение формы a ? До нашей эры ? d: e оценивается как ? б: (в?г:е). [2]
Примеры по языкам [ править ]
Ява [ править ]
класс ConditionalDemo2 {
public static void main ( String [] args ) {
int value1 = 1 ;
целое значение2 = 2 ;
int результат ;
логическое значение someCondition = true ;
результат = какое-то условие ? значение1 : значение2 ;
Система . вне . println ( результат );
}
}
В этом примере, поскольку someCondition истинно, программа выводит на экран «1». Используйте оператор ?: вместо оператора if-then-else, если это делает ваш код более читабельным; например, когда выражения компактны и не имеют побочных эффектов (таких как присваивание).
С++ [ править ]
#include <iostream>
int main () {
int x = 1 ;
интервал у = 2 ;
std :: cout << ( x > y ? x : y ) << "является большим из двух." << std :: endl ;
}
Существует несколько правил, применимых ко второму и третьему операндам в C++:
- Если оба операнда имеют один и тот же тип, результат будет того же типа.
- Если оба операнда имеют арифметический или перечисляемый тип, выполняются обычные арифметические преобразования (описанные в разделе «Стандартные преобразования») для их преобразования к общему типу.
- Если оба операнда относятся к типам указателей или один из них является типом указателя, а другой является константным выражением, значение которого равно 0, выполняются преобразования указателей для преобразования их в общий тип.
- Если оба операнда имеют ссылочные типы, выполняются преобразования ссылок для их преобразования в общий тип.
- Если оба операнда имеют тип void, общий тип — это тип void.
- Если оба операнда имеют один и тот же определяемый пользователем тип, общим типом является этот тип. [4]
С# [ править ]
// состояние ? первое_выражение: второе_выражение;
static double sinc ( double x )
{
return x != 0.0 ? Математика . Син ( х ) / х : 1,0 ;
}
Существует несколько правил, применимых ко второму и третьему операндам x и y в C#:
- Если x имеет тип X, а y имеет тип Y:
- Если существует неявное преобразование из X в Y, но не из Y в X, Y — это тип условного выражения.
- Если существует неявное преобразование из Y в X, но не из X в Y, X — это тип условного выражения.
- В противном случае тип выражения не может быть определен, и возникает ошибка времени компиляции.
- Если только один из x и y имеет тип и оба x и y неявно преобразуются в этот тип, этот тип является типом условного выражения.
- В противном случае тип выражения не может быть определен, и возникает ошибка времени компиляции. [2]
JavaScript [ править ]
вар возраст = 26 ;
вар напиток = ( возраст >= 21 ) ? «Пиво» : «Сок» ;
консоль . журнал ( напиток ); // "Пиво"
Условный оператор JavaScript совместим со следующими браузерами:
Chrome , Edge , Firefox (1), Internet Explorer , Opera , Safari , веб-просмотр Android, для Android , Edge Mobile , Firefox для Android (4), Opera для Android, Safari на IOS, Samsung Internet , Node.js. Chrome [5]
Специальное использование в условной цепочке [ править ]
Тернарный оператор является правоассоциативным, что означает, что его можно «связать в цепочку» следующим образом, аналогично цепочке if...else if...else if...else. [4]
Примеры по языкам [ править ]
JavaScript [ править ]
функции пример ( … ) {
возврата1 условие ? значение1
: условие2 ? значение2
: условие3 ? значение3
: значение4 ;
}
// Эквивалентно:
функции пример ( … ) {
if ( condition1 ) { return value1 ; }
Еще если ( условие2 ) { возвращаемое значение2 ; }
Еще если ( условие3 ) { возвращаемое значение3 ; }
Еще { возвращаемое значение4 ; }
}
Си/С++ [ править ]
const double a =
выражение1 ? а1
: выражение2 ? а2
: выражение3 ? a3
: /*иначе*/ a4 ;
// Эквивалентно:
double a ;
если ( выражение1 )
а = а1 ;
иначе если ( выражение2 )
а = а2 ;
иначе если ( выражение3 )
а = а3 ;
else /*иначе*/
a = a4 ;
Специальное использование в выражении присваивания [ править ]
условный оператор может возвращать L-значение в C/C++, которому можно присвоить другое значение, но подавляющее большинство программистов считают этот стиль крайне плохим, хотя бы из-за неясности этого метода. [6]
Си/С++ [ править ]
(( foo ) ? bar : baz ) = frink ;
//эквивалентно:
if ( foo )
bar = frink ;
еще
баз = Фринк ;
См. также [ править ]
- ?: , условный оператор в компьютерном программировании.
- Троичная операция
- Побитовые операторы
- логические операторы короткого замыкания
- Оператор (программирование)
Ссылки [ править ]
- ^ «Операторы равенства, отношения и условные операторы (Учебные пособия по Java™ > Изучение языка Java > Основы языка)» . docs.oracle.com . Проверено 29 апреля 2019 г.
- ^ Перейти обратно: а б с БиллВагнер. «?: Оператор — Справочник по C#» . docs.microsoft.com . Проверено 29 апреля 2019 г.
- ^ «Оператор ? : в Java» . www.cafeaulait.org . Проверено 29 апреля 2019 г.
- ^ Перейти обратно: а б Майкблом. «Условный оператор: ? :» . docs.microsoft.com . Проверено 29 апреля 2019 г.
- ^ «Условный (тройной) оператор — JavaScript» . http://developer.mozilla.org . Проверено 29 апреля 2019 г.
- ^ «Условный оператор» . wiki.c2.com . Проверено 29 апреля 2019 г.