Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EDT:Writing statements"
(→Function invocation) |
|||
Line 192: | Line 192: | ||
This kind of statement invokes a function. If the function invoked this way returns a value, that value is ignored. | This kind of statement invokes a function. If the function invoked this way returns a value, that value is ignored. | ||
+ | This is "hello world" in EGL. The single statement in the program passes the string "Hello world!" to the function SysLib.writeStdout. | ||
<source lang="java"> | <source lang="java"> | ||
program HelloWorld | program HelloWorld |
Revision as of 13:00, 14 February 2012
EGL provides two kinds of statements:
- General statements such as if and while, for processing the data that is immediately available to your logic.
- Action statements such as add and call, for accessing external data sources or invoking external logic.
Statement syntax
EGL statements are composed of keywords, expressions, operators, and punctuation. Most end with a semicolon. Other statements -- those which can contain other statements -- end with the keyword end. All statements can span multiple lines, and extra whitespace is insignificant, so you may format your code however you prefer.
Comments
Comments may appear anywhere in an EGL source file. EGL supports two kinds of comments:
- Line comments start with the characters // and stop at the end of the current line.
- Block comments start with the characters /* and stop with the characters */. Block comments can span multiple lines.
In this example, the variable x is assigned 1 and the variable y is assigned 2.
x = // This is a line comment. 1; y /* This is a block comment. It extends over five lines. */ = /* This is another block comment. */ 2;
The previous example has the same effect as these statements:
x = 1; y = 2;
General statements
The general statements are assignment, case, continue, declaration, exit, for, function invocation, if, return, throw, try, use, and while.
Assignment
An assignment statement gives a value to a variable or an element of a list. The source of the assignment can be any expression whose type is compatible with the assignment's target. If the source and target don't have the same type, the source will be converted to the target's type.
function areaOfCircle(radius int) returns(float) pi decimal(9,8); pi = 3.14159265; area float = pi * radius * radius; return(area); end
Case
The case statement responds to conditions at run time by executing one set of statements rather than another:
- You can test a criterion value. The following example invokes
mySecondFunction
:
function test() x Int = 3; case (x) when (1) myFirstFunction(); when (2, 3, 4) mySecondFunction(); otherwise myDefaultFunction(); end end
- You can test a set of logical expressions. The following example displays only "x passes":
function test() x Int = 3; y Int = 5; z Int = 7; case when (x == 3) SysLib.writeStdOut("x passes"); when (y == 5) SysLib.writeStdOut("y passes"); when (z == 7) SysLib.writeStdOut("z passes"); otherwise SysLib.writeStdErr("You will not see this message."); end end end
As shown, no more than one clause ever executes. Control does not “fall through” from one clause to the next.
Continue
The continue statement returns control to the start of a block of code controlled by a for, forEach, or while statement. The statement lets you return to a labeled statement of one of those kinds, or to the nearest embedding statement of one of those kinds.
Here is an example:
inputList int[] = [2, 4, 6, 8, 10, 12, 14, 16]; for(i int from 1 to inputList.getSize() by 1) SysLib.writeStdOut(inputList[i]); if((i % 3) != 0) continue; end // if SysLib.writeStdOut(" "); end
The code displays each integer on its own line, inserting a blank line after each group of three.
Declaration
New variables are created using declaration statements. A declaration consists of the name of the new variable, followed by its type.
Declarations can optionally include an initializer, which assigns an initial value to the new variable. Variables declared without an initializer have the default value for their type (zero, the empty string, false, null, etc.).
Multiple variables of the same type can be declared in a single statement. Simply put a comma between each variable's name. If a declaration of multiple variables has an initializer, all of the variables are assigned the same initial value.
name string; // Declares a variable called 'name' of type string. row, column int; // Declares two ints. defaultName string = "Action"; // A declaration with an initializer. defaultRow, defaultColumn int = 10; // Declares and initializes two ints.
Exit
The exit statement exits from a function, program, service, or run unit; or from a block of code controlled by a case, for, forEach, if, or while statement.
For
The for statement runs a set of statements in a loop that repeats until a counter exceeds a specified value.
The example code shows three variations of a for statement that adds the same set of numbers.
program MyTestProgram function main() inputList int[] = [10, 4, 6, 8, 2]; numberInList int = inputList.getSize(); sum = 0; // the first for loop increments by 1. for(i int from 1 to numberInList) sum = inputList[i] + sum; end SysLib.writeStdOut("sum after the first for loop is " + sum); sum = 0; // the second for loop has the same effect but specifies the increment value. for(i int from 1 to numberInList by 1) sum = inputList[i] + sum; end SysLib.writeStdOut("sum after the second for loop is " + sum); sum = 0; // the third for loop starts at the opposite side of the list and decrements by 1 for(i int from numberInList to 1 decrement by 1) sum = inputList[i] + sum; end SysLib.writeStdOut("sum after the third for loop is " + sum); end end
In each case, the variable i
was local to the for statement. Here is an alternative:
i int; for(i from 1 to numberInList) sum = inputList[i] + sum; end
After that code ends, the value of i
is available and equals numberInList + 1
.
Function invocation
This kind of statement invokes a function. If the function invoked this way returns a value, that value is ignored.
This is "hello world" in EGL. The single statement in the program passes the string "Hello world!" to the function SysLib.writeStdout.
program HelloWorld function main() SysLib.writeStdout( "Hello world!" ); end end
Function invocations are also a kind of expression, so they can appear in many other places, such as the source of an assignment, or as an argument to another function invocation.
If
The if statement runs a set of statements if a logical expression resolves to true. The optional else keyword marks the start of an alternative set of statements that run only if the logical expression resolves to false.
The following code shows how to embed If statements in other If statements.
program MyTestProgram // A binary search finds a value in a sorted (preferably short) list. function binarySearch(list int[], lowIndex int, highIndex int, value int) returns(int) while(true) middleIndex int = (lowIndex + highIndex) / 2; if(list[middleIndex] == value) return(middleIndex); else if(list[middleIndex] >= value) highIndex = middleIndex - 1; else if(list[middleIndex] < value) lowIndex = middleIndex + 1; end end end if(highIndex < lowIndex) return(-1); end end end function main() myNumbers int[] =[-6, -1, 2, 4, 7, 9 ]; valueOfInterest int = -1; lowestIndex int = 1; highestIndex int = myNumbers.getSize(); location int = binarySearch(myNumbers, lowestIndex, highestIndex, valueOfInterest); if (location == -1) SysLib.writeStdOut("Did not find " + valueOfInterest + "."); else SysLib.writeStdOut("The value of interest is " + valueOfInterest + ", at location " + location + "."); end end end
Return
Throw
Try
Use
While
Action statements
The action statements are add, call, close, delete, execute, forEach, get, open, and prepare.
Except for the call statement, all are now used for accessing a relational database.
Add
Call
In EDT version .8:
call MyInterfaceType.theFunction) using "binding.myService" returning to myCallBackFunction onException myExceptionHandler;
In EDT version .7:
myService MyServiceType?{@Resource}; call myServiceVariable.theFunction() returning to myCallBackFunction onException myExceptionHandler;
For further details, see Accessing a service
Close
Delete
Execute
ForEach
Get
Open
Prepare