# Conditional Operator

Selects one expression to calculate, given two or more expressions, because of a condition.

## Syntax

### Boolean construct

```
If condition Then then_result Else else_result
```

### Comparison construct

```
If expression_1 <=> expression_2 { ( [ Is ] comparison_op ) result_n }…
```

## Parts

`condition`

- A Boolean expression
`then_result`

- An expression.
When
`condition`

is true, it becomes the result of the conditional expression. `else_result`

- An expression.
- Mandatory in the Boolean construct.
When
`condition`

is false, it becomes the result of the conditional expression. `expression_1`

- An expression of a data type that can be compared.
`expression_2`

- An expression of a data type compatible with
`expression_1`

. `comparison_op`

- Comes after a left parenthesis and optionally
`Is`

. `result_n`

- One of two or more expressions calculated only when the related
`comparison_op`

makes a true comparison between`expression_1`

and`expression_2`

.

## Instructions

### Boolean construct

The Boolean construct can look almost the same as the statement `If…Then…Else`

.
But the operator evaluates expressions, not statements.

When `condition`

evaluates as true, `then_result`

is evaluated and its value is the result of the operation—`else_result`

is not evaluated.
When `condition`

evaluates as false, `else_result`

is evaluated and its value is the result of the operation—`then_result`

is not evaluated.

Usually, `then_result`

and `else_result`

must be compatible data types.
But they can be different types if, for example, the outer expression can accept more than one data type, such as a polymorphic method.

### Comparison construct

The comparison construct lets you compare two values, and returns a different value given how they compare.
This construct can look almost the same as the statement `Select…Case`

.

With this construct, you must use the comparison operators `<`

, `=`

, and `>`

.
You can use all three, or you can put them together as `<=`

, `>=`

, or `<>`

.

With all three comparisons, the expression must have three `Is`

clauses with three result values.
With only two comparisons, the expression then must have only two `Is`

clauses with two result values.

Usually the data types of the result expressions must be compatible. But they can be different types if, for example, the outer expression can accept more than one data type, such as a polymorphic method.

## Examples

### Boolean construct

```
Function FootOrFeet(dist As Real) As String
Return If dist = 1.0 Then "foot" Else "feet"
End Function
```

### Comparison construct

```
Function Polarity(x As Real) As String
Return If x <=> 0.0 (<) "negative" (=) "neutral" (>) "positive"
End Function
```

```
Function FootOrFeet(dist As Real) As String
Return If dist <=> 1.0 (=) "foot" (<>) "feet"
End Function
```