?( or ifelse(

?(IFTEST

, TRUEVALUE

, …

, FALSEVALUE

)
The** ?( **function allows a formula to make a true/false, yes/no decision.

**Parameters**

This function has three required parameters:

** iftest** – A true false value that controls the decision of the formula.

** truevalue** – The function result if the

** …** – The function can have additional

** falsevalue** – The function result if the

**Description**

This function returns the value of either one of the *truevalue* parameters or the *falsevalue* parameter, depending on whether the *iftest* parameter (or parameters) is true or false. The *truevalue* and *falsevalue* may calculate numbers or text, but usually all of the value parameters should calculate the same type of data (otherwise the rest of the formula will probably produce an error depending on which choice is selected).

`?(1=1,"same","different") ☞ `*same*
?(1=2,"same","different") ☞ *different*

You can add additional pairs of *iftest/truevalue* parameters to the function. In that case, it will evaluate each pair from left to right. If none of the *iftest* parameters are true then the final *falsevalue* parameter will be selected.

`?(5=5,"same",5>5,"bigger","smaller") ☞ `*same*
?(5=4,"same",5>4,"bigger","smaller") ☞ *bigger*
?(5=6,"same",5>6,"bigger","smaller") ☞ *smaller*

No matter how many *truevalue* and *falsevalue* parameters are included in the function, ultimately only one is actually used. The rest are effectively discarded. Since these extra parameters are not actually used, Panorama doesn’t require that they have valid values. In other words, if an unused parameter contains a runtime error, Panorama doesn’t care. Since the value isn’t used, the formula continues normally without stopping because of the error.

For example, suppose that you have a division formula like this:

```
numerator/denominator
```

This is fine for most values, but what if the denominator is zero? Division by zero is invalid. Using the ?( function we can ensure that a valid result is calculated even if the denominator is zero (assuming you think zero is an acceptable result in this situation).

```
?(denominator<>0,numerator/denominator,0)
```

If the denominator is zero the division is ignored, and zero is returned.

Advanced Notes: 1) Experienced Panorama users will realize that the formula above would not work in earlier versions of Panorama, because the division error would not be ignored. However, this now works fine in current versions. 2) Strictly speaking, division by zero does not produce an error in the current version of Panorama (it did in previous versions). Instead of an error, division by zero now produces the value *infinity*.

Tip: As an alternative you can spell this formula *ifelse(*.

`ifelse(1=1,"same","different") ☞ `*same*
ifelse(1=2,"same","different") ☞ *different*

Note for C programmers: The *?(* function is similar in operation to the C *?:* operator. For example, in C you would say:

```
a ? b : c;
```

In Panorama this would be expressed like this:

```
?(a,b,c)
```

**Error Messages**

** ?( function is missing the final false value.** – This function must have an odd number of parameters (3, 5, 7, 9, etc.). If it has an even number of parameters then this error will occur.

**See Also**

- switch( -- chooses from a list of values.

**History**

Version | Status | Notes |

10.0 | Updated | This function has several major changes from previous versions. 1) Previously this function only allowed 3 parameters. Now it allows 3, 5, 7, 9, etc. You can add as many 2) Previously Panorama evaluated all of the parameters of the ?( function. If an error occured in any parameter, that error would "blow up" the entire formula. Now errors in 3) You can now use |