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.