Statements
CaseSelection
WhenCase
WhenCaseSelection
NullCaseSelection
Overview
These statements generalise the classic "if" and "case" statements found in typical 3GLs.
CaseSelection Statement
CaseSelection
WhenCase
ConditionAnd
...
WhenCaseSelection
...
WhenCase
ConditionAnd
...
WhenCaseSelection
...
NullCaseSelection
...
The CaseSelection statement introduces further selection statements.
WhenCase Statement
CaseSelection
WhenCase
ConditionAnd
...
WhenCaseSelection
...
WhenCase
ConditionAnd
...
WhenCaseSelection
...
This statement introduces a pair of statements that test for a condition and performs processing in the associated WhenCaseSelection subregion if true.
If there is more than one WhenCase statement, these are processed in order until a true condition is evaluated. The action statements in the WhenCaseSelection statements are then processed and the CaseSelection statement is exited.
WhenCaseSelection Statement
CaseSelection
WhenCase
ConditionAnd
...
WhenCaseSelection
...
The WhenCaseSelection statement subregion is executed if the associated WhenCase condition is evaluated to be true.
NullCase Statement
CaseSelection
WhenCase
ConditionAnd
...
WhenCaseSelection
...
NullCaseSelection
...
The NullCaseSelection statement subregion is executed if all of the preceding WhenCase condition statements are found to be false.
This statement cannot be used on its own and must appear after at least one WhenCase statement.
Discussion
The CaseSelection statement is similar to "if", "switch" and "case" statements found in programming languages and translates to these structures.
Programming statement: "if"
CaseSelection
WhenCase
ConditionAnd
TestAnd
Account.Balance >= <<FixedZero>>
WhenCaseSelection
Template
OK
Generated code:
if (account->balance >= 0.0) {
printf("OK");
}
Programming statement: "if then else"
CaseSelection
WhenCase
ConditionAnd
TestAnd
Account.Balance >= <<FixedZero>>
WhenCaseSelection
Template
OK
NullCaseSelection
Template
Overdrawn
Generated code:
if (account->balance >= 0.0) {
printf("OK");
} else {
printf("Overdrawn");
}
Programming statement: "switch" or "case"
CaseSelection
WhenCase
ConditionAnd
TestAnd
Account.Balance >= <<FixedZero>>
WhenCaseSelection
Template
OK
WhenCase
ConditionAnd
TestAnd
Account.Balance >= Bank_Policy.Special_limit
WhenCaseSelection
Template
Special Measures
NullCaseSelection
Template
Overdrawn
Generated code:
if (account->balance >= 0.0) {
printf("OK");
} else if (account->balance >= bank_policy->special_limit) {
printf("Special Measures");
} else {
printf("Overdrawn");
}
Note that the CaseSelection statement is not generated as a C switch statement. This is because switch statements are implemented as jump tables that use a single variable value to decide which case out of many to execute.
|