
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.