Lably
Skip to content

Ternary conditional operator

Conditional operator in computer programming

  • 18 min read
  • 3 chapters

Related on Lably

Through Computer programming, Conditional (computer programming) and Data type

Although a ternary operator in general is any operator with three arguments, the three-argument conditional operator is the only common one in programming, so it is loosely called the ternary operator.

C introduced the syntax a ? b : c, read as "if a then b otherwise c", which is widely used by other languages with C-like syntax. Some languages use functional syntax: in Visual Basic, it is written If(a, b, c).

Many languages support conditional expressions with two, three, or more clauses. Languages following ALGOL-like syntax often support them with the same syntax as conditional statements, if a then b else c.

The construct first appeared in CPL in 1963, as a → b, c.

Patterns

Assignment

The value of the operator can be assigned to a variable. For a weakly typed language, the data type of the selected value may determine the type of the assigned value. For a strongly typed language, both value expressions must evaluate to a type that is compatible with the target variable.

The operator is similar to the way conditional expressions (if-then-else) work in functional programming languages, like Scheme, ML, Haskell, and XQuery, since if-then-else forms an expression instead of a statement in those languages.

The operator allows for initializing a variable via a single statement which otherwise might require multiple statements. Use in variable assignment reduces the probability of a bug from a faulty assignment as the assigned variable is stated only once.

For example, in Python:

<span id="mwQg"></span><span class="n" id="mwQw">x</span><span class="p" id="mwRA">:</span> <span class="nb" id="mwRQ">str</span> <span class="o" id="mwRg">=</span> <span class="s1" id="mwRw">'foo'</span> <span class="k" id="mwSA">if</span> <span class="n" id="mwSQ">b</span> <span class="k" id="mwSg">else</span> <span class="s1" id="mwSw">'bar'</span>

instead of:

<span id="mwTw"></span><span class="n" id="mwUA">x</span><span class="p" id="mwUQ">:</span> <span class="nb" id="mwUg">str</span> <span class="k" id="mwUw">if</span> <span class="n" id="mwVA">b</span><span class="p" id="mwVQ">:</span> <span class="n" id="mwVg">x</span> <span class="o" id="mwVw">=</span> <span class="s1" id="mwWA">'foo'</span> <span class="k" id="mwWQ">else</span><span class="p" id="mwWg">:</span> <span class="n" id="mwWw">x</span> <span class="o" id="mwXA">=</span> <span class="s1" id="mwXQ">'bar'</span>

In a language with block scope, a variable must be declared before the if-else statement. For example:

<span id="mwYg"></span><span class="n" id="mwYw">std</span><span class="o" id="mwZA">::</span><span class="n" id="mwZQ">string</span><span class="w" id="mwZg"> </span><span class="n" id="mwZw">s</span><span class="p" id="mwaA">;</span> <span class="k" id="mwaQ">if</span><span class="w" id="mwag"> </span><span class="p" id="mwaw">(</span><span class="n" id="mwbA">b</span><span class="p" id="mwbQ">)</span><span class="w" id="mwbg"> </span><span class="p" id="mwbw">{</span> <span class="w" id="mwcA"> </span><span class="n" id="mwcQ">s</span><span class="w" id="mwcg"> </span><span class="o" id="mwcw">=</span><span class="w" id="mwdA"> </span><span class="s" id="mwdQ">"foo"</span><span class="p" id="mwdg">;</span> <span class="p" id="mwdw">}</span><span class="w" id="mweA"> </span><span class="k" id="mweQ">else</span><span class="w" id="mweg"> </span><span class="p" id="mwew">{</span> <span class="w" id="mwfA"> </span><span class="n" id="mwfQ">s</span><span class="w" id="mwfg"> </span><span class="o" id="mwfw">=</span><span class="w" id="mwgA"> </span><span class="s" id="mwgQ">"bar"</span><span class="p" id="mwgg">;</span> <span class="p" id="mwgw">}</span>

Use of the conditional operator simplifies this:

<span id="mwhw"></span><span class="n" id="mwiA">std</span><span class="o" id="mwiQ">::</span><span class="n" id="mwig">string</span><span class="w" id="mwiw"> </span><span class="n" id="mwjA">s</span><span class="w" id="mwjQ"> </span><span class="o" id="mwjg">=</span><span class="w" id="mwjw"> </span><span class="n" id="mwkA">b</span><span class="w" id="mwkQ"> </span><span class="o" id="mwkg">?</span><span class="w" id="mwkw"> </span><span class="s" id="mwlA">"foo"</span><span class="w" id="mwlQ"> </span><span class="o" id="mwlg">:</span><span class="w" id="mwlw"> </span><span class="s" id="mwmA">"bar"</span><span class="p" id="mwmQ">;</span>

Furthermore, since initialization is now part of the declaration, rather than a separate statement, the identifier can be a constant. For example:

<span id="mwnQ"></span><span class="k" id="mwng">const</span><span class="w" id="mwnw"> </span><span class="n" id="mwoA">std</span><span class="o" id="mwoQ">::</span><span class="n" id="mwog">string</span><span class="w" id="mwow"> </span><span class="n" id="mwpA">s</span><span class="w" id="mwpQ"> </span><span class="o" id="mwpg">=</span><span class="w" id="mwpw"> </span><span class="n" id="mwqA">b</span><span class="w" id="mwqQ"> </span><span class="o" id="mwqg">?</span><span class="w" id="mwqw"> </span><span class="s" id="mwrA">"foo"</span><span class="w" id="mwrQ"> </span><span class="o" id="mwrg">:</span><span class="w" id="mwrw"> </span><span class="s" id="mwsA">"bar"</span><span class="p" id="mwsQ">;</span>

Case selector

The conditional operator can be used for case selectors. For example:

<span id="mwtg"></span><span class="n" id="mwtw">vehicle</span><span class="w" id="mwuA"> </span><span class="o" id="mwuQ">=</span><span class="w" id="mwug"> </span><span class="n" id="mwuw">arg</span><span class="w" id="mwvA"> </span><span class="o" id="mwvQ">==</span><span class="w" id="mwvg"> </span><span class="sc" id="mwvw">'B'</span><span class="w" id="mwwA"> </span><span class="o" id="mwwQ">?</span><span class="w" id="mwwg"> </span><span class="n" id="mwww">bus</span><span class="w" id="mwxA"> </span><span class="o" id="mwxQ">:</span> <span class="w" id="mwxg"> </span><span class="n" id="mwxw">arg</span><span class="w" id="mwyA"> </span><span class="o" id="mwyQ">==</span><span class="w" id="mwyg"> </span><span class="sc" id="mwyw">'A'</span><span class="w" id="mwzA"> </span><span class="o" id="mwzQ">?</span><span class="w" id="mwzg"> </span><span class="n" id="mwzw">airplane</span><span class="w" id="mw0A"> </span><span class="o" id="mw0Q">:</span> <span class="w" id="mw0g"> </span><span class="n" id="mw0w">arg</span><span class="w" id="mw1A"> </span><span class="o" id="mw1Q">==</span><span class="w" id="mw1g"> </span><span class="sc" id="mw1w">'T'</span><span class="w" id="mw2A"> </span><span class="o" id="mw2Q">?</span><span class="w" id="mw2g"> </span><span class="n" id="mw2w">train</span><span class="w" id="mw3A"> </span><span class="o" id="mw3Q">:</span> <span class="w" id="mw3g"> </span><span class="n" id="mw3w">arg</span><span class="w" id="mw4A"> </span><span class="o" id="mw4Q">==</span><span class="w" id="mw4g"> </span><span class="sc" id="mw4w">'C'</span><span class="w" id="mw5A"> </span><span class="o" id="mw5Q">?</span><span class="w" id="mw5g"> </span><span class="n" id="mw5w">car</span><span class="w" id="mw6A"> </span><span class="o" id="mw6Q">:</span> <span class="w" id="mw6g"> </span><span class="n" id="mw6w">arg</span><span class="w" id="mw7A"> </span><span class="o" id="mw7Q">==</span><span class="w" id="mw7g"> </span><span class="sc" id="mw7w">'H'</span><span class="w" id="mw8A"> </span><span class="o" id="mw8Q">?</span><span class="w" id="mw8g"> </span><span class="n" id="mw8w">horse</span><span class="w" id="mw9A"> </span><span class="o" id="mw9Q">:</span> <span class="w" id="mw9g"> </span><span class="n" id="mw9w">feet</span><span class="p" id="mw-A">;</span>

Sign in to keep reading

2 more chapters are free with a Lably account.

More in Computing and communication