Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Условный оператор поддерживается во многих языках программирования . Этот термин обычно обозначается ?:как в 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 ;

См. Также [ править ]

  • ?: , условный оператор в компьютерном программировании
  • Тернарная операция
  • Побитовые операторы
  • логические операторы короткого замыкания
  • Оператор (программирование)

Ссылки [ править ]

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