2021-07-31 21:04:15 +02:00
## 1 - Variables
Variables defined using #= can't be changed (they are "final"), while the ones affected using the normal operator (=) can.
```
2021-07-31 21:30:58 +02:00
helloworld #= "Hello, World!"
2021-07-31 21:04:15 +02:00
```
## 2 - (Anonymous) Functions
You can make an anonymous functions using the following syntax:
```
getHelloWorld: ~String => {
2021-07-31 21:30:58 +02:00
return "Hello, World!"
2021-07-31 21:04:15 +02:00
}
```
< sub > `~String` can be omitted, see [#3 ](#3---types ).</ sub >
Note that you can make `getHelloWorld` final by replacing `=>` with `#=>` .
To define a **named** (and mandatorily final) function, replace `=>` with `>>` and put the (optional) return type before the function's name:
```
String getHelloWorld >> {
return "Hello, World!"
}
```
### 2.1 - Main
Main can be a variable named `main` that contains an anonymous function, a function named `main` or a function that has the `as_main` attribute:
```
main #=> {}
main >> {}
as_main helloWorld >> {}
```
## 3 - Types
Types are *inferred* , which means that specifying types of variables or returned values is optional.
2021-07-31 21:30:58 +02:00
< sup > Note: While primitives types (`String`, `int` , `double` , `boolean` , `float` ) will be transpiled to their equivalents for the target of the transpiler, this is not the case for other types.< sup >
2021-07-31 21:04:15 +02:00
Every variable has a static type by default; it is possible to make a **non-final** variable dynamic by adding the `dyn` /`dynamic` attribute:
```
dyn helloWorld = 0
2021-07-31 21:30:58 +02:00
helloWorld = "Hello, World!"
2021-07-31 21:04:15 +02:00
```
The attributes mentioned above can also be used as a return type for functions/anonymous functions:
```
2021-07-31 21:30:58 +02:00
helloWorld: ~dynamic => { return 0 }
dyn helloWorld >> { return 0 }
2021-07-31 21:04:15 +02:00
```