conditional operator

{{Wiktionary|Conditional operator}}

{{mergeto|ternary conditional operator|discuss=Talk:Conditional operator#Related Article|date=February 2025}}

The conditional operator is supported in many programming languages. This term usually refers to ?: as in C, C++, C#, and JavaScript. However, in Java, this term can also refer to && and ||.

&& and ||

In some programming languages, e.g. Java, the term conditional operator refers to short circuit boolean operators && and ||. The second expression is evaluated only when the first expression is not sufficient to determine the value of the whole expression.{{Cite web|url=https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html|title=Equality, Relational, and Conditional Operators (The Java™ Tutorials > Learning the Java Language > Language Basics)|website=docs.oracle.com|access-date=2019-04-29}}

= Difference from bitwise operator =

& and | are bitwise operators that occur in many programming languages. The major difference is that bitwise operations operate on the individual bits of a binary numeral, whereas conditional operators operate on logical operations. Additionally, expressions before and after a bitwise operator are always evaluated.

if (expression1 || expression2 || expression3)

If expression 1 is true, expressions 2 and 3 are NOT checked.

if (expression1 | expression2 | expression3)

This checks expressions 2 and 3, even if expression 1 is true.

Short circuit operators can reduce run times by avoiding unnecessary calculations. They can also avoid Null Exceptions when expression 1 checks whether an object is valid.

= Usage in Java =

class ConditionalDemo1 {

public static void main(String[] args) {

int value1 = 1;

int value2 = 2;

if ((value1 == 1) && (value2 == 2))

System.out.println("value1 is 1 AND value2 is 2");

if ((value1 == 1) || (value2 == 1))

System.out.println("value1 is 1 OR value2 is 1");

}

}

"?:"

In most programming languages, ?: is called the conditional operator. It is a type of ternary operator. However, ternary operator in most situations refers specifically to ?: because it is the only operator that takes three operands.{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator|title=?: Operator - C# Reference|last=BillWagner|website=docs.microsoft.com|language=en-us|access-date=2019-04-29}}

= Regular usage of "?:" =

?: is used in conditional expressions. Programmers can rewrite an if-then-else expression in a more concise way by using the conditional operator.{{Cite web|url=http://www.cafeaulait.org/course/week2/43.html|title=The ? : operator in Java|website=www.cafeaulait.org|access-date=2019-04-29}}

== Syntax ==

condition ? expression 1 : expression 2

condition: An expression which is evaluated as a boolean value.

expression 1, expression 2: Expressions with values of any type.

If the condition is evaluated to true, the expression 1 will be evaluated. If the condition is evaluated to false, the expression 2 will be evaluated.

It should be read as: "If condition is true, assign the value of expression 1 to result. Otherwise, assign the value of expression 2 to result."

== Association property ==

The conditional operator is right-associative, meaning that operations are grouped from right to left. For example, an expression of the form a ? b : c ? d : e is evaluated as a ? b : (c ? d : e).

== Examples by languages ==

=== Java ===

class ConditionalDemo2 {

public static void main(String[] args) {

int value1 = 1;

int value2 = 2;

int result;

boolean someCondition = true;

result = someCondition ? value1 : value2;

System.out.println(result);

}

}

In this example, because someCondition is true, this program prints "1" to the screen. Use the ?: operator instead of an if-then-else statement if it makes your code more readable; for example, when the expressions are compact and without side-effects (such as assignments).

=== C++ ===

  1. include

int main() {

int x = 1;

int y = 2;

std::cout << ( x > y ? x : y ) << " is the greater of the two." << std::endl;

}

There are several rules that apply to the second and third operands in C++:

  • If both operands are of the same type, the result is of that type
  • If both operands are of arithmetic or enumeration types, the usual arithmetic conversions (covered in Standard Conversions) are performed to convert them to a common type
  • If both operands are of pointer types or if one is a pointer type and the other is a constant expression that evaluates to 0, pointer conversions are performed to convert them to a common type
  • If both operands are of reference types, reference conversions are performed to convert them to a common type
  • If both operands are of type void, the common type is type void
  • If both operands are of the same user-defined type, the common type is that type.{{Cite web|url=https://docs.microsoft.com/en-us/cpp/cpp/conditional-operator-q|title=Conditional Operator: ?|last=mikeblome|website=docs.microsoft.com|language=en-us|access-date=2019-04-29}}

=== C# ===

// condition ? first_expression : second_expression;

static double sinc(double x)

{

return x != 0.0 ? Math.Sin(x)/x : 1.0;

}

There are several rules that apply to the second and third operands x and y in C#:

  • If x has type X and y has type Y:
  • If an implicit conversion exists from X to Y but not from Y to X, Y is the type of the conditional expression.
  • If an implicit conversion exists from Y to X but not from X to Y, X is the type of the conditional expression.
  • Otherwise, no expression type can be determined, and a compile-time error occurs.
  • If only one of x and y has a type, and both x and y are implicitly convertible to that type, that type is the type of the conditional expression.
  • Otherwise, no expression type can be determined, and a compile-time error occurs.

=== JavaScript ===

var age = 26;

var beverage = (age >= 21) ? "Beer" : "Juice";

console.log(beverage); // "Beer"

The conditional operator of JavaScript is compatible with the following browsers:

Chrome, Edge, Firefox (1), Internet Explorer, Opera, Safari, Android webview, Chrome for Android, Edge Mobile, Firefox for Android (4), Opera for Android, Safari on IOS, Samsung Internet, Node.js.{{Cite web |title=Conditional (ternary) operator - JavaScript |url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator |access-date=2019-04-29 |website=developer.mozilla.org |language=en-US}}

= Special usage in conditional chain =

The ternary operator is right-associative, which means it can be "chained" in the following way, similar to an if ... else if ... else if ... else chain.

== Examples by languages ==

=== JavaScript ===

function example(…) {

return condition1 ? value1

: condition2 ? value2

: condition3 ? value3

: value4;

}

// Equivalent to:

function example(…) {

if (condition1) { return value1; }

else if (condition2) { return value2; }

else if (condition3) { return value3; }

else { return value4; }

}

=== C/C++ ===

const double a =

expression1 ? a1

: expression2 ? a2

: expression3 ? a3

: /*otherwise*/ a4;

// Equivalent to:

double a;

if (expression1)

a = a1;

else if (expression2)

a = a2;

else if (expression3)

a = a3;

else /*otherwise*/

a = a4;

= Special usage in assignment expression =

the conditional operator can yield a L-value in C/C++ which can be assigned another value, but the vast majority of programmers consider this extremely poor style, if only because of the technique's obscurity.{{Cite web|url=http://wiki.c2.com/?ConditionalOperator|title=Conditional Operator|website=wiki.c2.com|access-date=2019-04-29}}

== C/C++ ==

((foo) ? bar : baz) = frink;

//equivalent to:

if (foo)

bar = frink;

else

baz = frink;

See also

References