Results
May 2, 2022 ยท View on GitHub
Results define the outputs of some declaration when it is called. Here is an example:
result: Int
Here is a breakdown of the syntax:
- The name of the result (here
result). This can be any combination of upper- and lowercase letters, underscores, and numbers, as long as it does not start with a number. However, we suggest to uselowerCamelCasefor the names of parameters. - A colon.
- The type of the parameter (here
Int).
Complete Example
Let us now look at a full example of a step called doSomething with two results:
step doSomething() -> (result1: Int, result2: Boolean) {
// ...
}
The interesting part is the list of results, which uses the following syntactic elements:
- An arrow
->. - An opening parenthesis.
- A list of results, the syntax is as described above. They are separated by commas. A trailing commas is permitted.
- A closing parenthesis.
Shorthand Version: Single Result
In case that the callable produces only a single result, we can omit the parentheses. The following two declarations are, hence, equivalent:
step doSomething1() -> (result: Int) {}
step doSomething2() -> result: Int {}
Shorthand Version: No Results
In case that the callable produces no results, we can usually omit the entire results list. The following two declarations are, hence equivalent:
step doSomething1() -> () {}
step doSomething2() {}
The notable exception are callable types, where the result list must always be specified even when it is empty.
Corresponding Python Code
Note: This section is only relevant if you are interested in the stub language.
Results must be ordered the same way in Python as they are in Simple-ML. Moreover, the Simple-ML type of a result should capture the possible values of this result accurately. Ideally, the Python result should also have a matching type hint.
Since Python results do not have a name, the names of Simple-ML results can be arbitrary. Naturally, a name should be chosen that captures the purpose of the result.