Text not verified for kermeta 2 | |
---|---|
Kermeta provides a block notion to manage scope of variable.
Instruction of the block have to be
inserted between
do
and
end
keywords. Theses two
keywords may be omitted for the conditional and
for the loop
structures.
A variable could only be accessed in the block where it was defined and in its sub blocks:
do var v1 : Integer init 3 var v2 : Integer init 2 do var v3 : Integer v3 := v1 + v2 var v2 : Integer // error : v2 is already declared in the upper block end var v4 : Integer init v3 // error : v3 is unknown here end
Kermeta's conditional statement is composed of at least two
elements : a boolean expression and
a block that is executed if the
boolean is evaluated to
true
. You can add a third
element, with the
else
keyword, that is executed if
the boolean expression is evaluated to
false
.
Example 1 : if..then..else block
var v1 : Integer init 2 var v2 : String init "blah" if v1 > 5 then v1 := v1-5 if v1 == 2 then v2 := v1 v1 := v2 + v1 else v1 := 0 end
The
if
statement is an expression (see
Chapter 3,
Kermeta Metamodel
). As any expression in
Kermeta, it can return a value. The return
type of the
if
statement must be a super type of the values
"returned" by both
then
and
else
blocks (otherwise the type checker will send an error). The values
considered as the result of
the evaluation (the "returned" values)
of
the
if
statement are the last evaluated statement
inside
then
or
else
block
Example 2 : conditional is an expression
var s : String s := if false then "a" else "b" end
Example 3: a more complex conditional
var x : String var y : Integer init 5 x := if y < 3 then stdio.writeln("hello") "a" else "b" "c" end // The String "c" will be the value of x
Here is a sample of a typical loop in Kermeta.
var v1 : Integer init 3 var v2 : Integer init 6 from var i : Integer init 0 until i == 10 loop i := i + 1 end
Note | |
---|---|
Unlike Java, there is no exit, break or continue function in Kermeta. |
See Section 2.15, “ Collections ” for functions offering iterator-like scanning.