Although it is pretty intuitive, it is worth having a short review of
the syntax for `if`

statements and `if`

expressions. Let’s start
with `if`

expressions because they are the simplest to explain. An
`if`

expression has the form:

```
if cexpr then expr1 else expr2;
```

where `cexpr`

is a conditional expression (that will evaluate to a
`Boolean`

value), `expr1`

is the value the expression will have if
`cexpr`

evaluates to `true`

and `expr2`

is the value the
expression will have if `cexpr`

evaluates to `false`

.

An `if`

statement has the general syntax:

```
if cond1 then
// Statements used if cond1==true
elseif cond2 then
// Statements used if cond1==false and cond2==true
// ...
elseif condn then
// Statements used if all previous conditions are false
// and condn==true
else
// Statements used otherwise
end if;
```

It is important to note that when an `if`

statement appears in an
`equation`

section, the number of equations must be the same
regardless of which branch through the `if`

statement is taken (this
applies in the presence of `elseif`

as well). One exception is the
use of `if`

within an `initial equation`

or `initial algorithm`

section where an `else`

clause is not required since the number of
equations doesn’t have to be same for both branches. Another notable
exception is the use of `if`

within Functions where, again,
there is not requirement that the number of equations be the same
across both branches.

A special case here is when you have an `if`

statement that looks like this:

```
if cond then
x = y;
else
x = z;
end if;
```

We can see that in both branches, a value is assigned to `x`

. As such, an
equivalent way to write this using an `if`

expression would be:

```
x = if cond then y else z;
```

The advantage of the second formulation is that it may make it easier for a tool
to optimize the code generation in the case of an `if`

expression.

Note

Note that conditional expressions within both `if`

statements
and `if`

expressions have the potential to generate
Events.