109 lines
2.0 KiB
Markdown
109 lines
2.0 KiB
Markdown
|
# Variables and Constants
|
||
|
|
||
|
Misti uses `var` for variables and `val` for constant reference variables.
|
||
|
|
||
|
Variables and constants must always be initialized.
|
||
|
|
||
|
```misti
|
||
|
// A variable, its value can be modified
|
||
|
var accumulator = 0
|
||
|
accumulator += 1
|
||
|
```
|
||
|
|
||
|
```misti
|
||
|
// A "constant", its value cannot be modified
|
||
|
val name = "Bob"
|
||
|
|
||
|
// Illegal, will raise an error in compile time
|
||
|
name = "Mike"
|
||
|
```
|
||
|
|
||
|
```md-info
|
||
|
If a constant's value is a primitive value, it cannot be changed.
|
||
|
<br />
|
||
|
However, if it is a reference value, its inner attributes can still
|
||
|
be changed, but not the reference itself.
|
||
|
```
|
||
|
|
||
|
## Identifiers
|
||
|
|
||
|
Identifiers start with a lower case letter or underscore,
|
||
|
and then can contain letters, numbers and underscores.
|
||
|
They can not start with a dollar sign.
|
||
|
|
||
|
```misti
|
||
|
variable
|
||
|
_variable
|
||
|
|
||
|
var1
|
||
|
v4r
|
||
|
```
|
||
|
|
||
|
If an identifier starts with an upper case letter, it is considered to be
|
||
|
a Datatype.
|
||
|
|
||
|
```misti
|
||
|
Str
|
||
|
Num
|
||
|
Bool
|
||
|
Array
|
||
|
Map
|
||
|
|
||
|
CustomDatatype
|
||
|
```
|
||
|
|
||
|
## Type inference
|
||
|
|
||
|
Variable declarations have type inference.
|
||
|
|
||
|
```misti
|
||
|
val anInteger = 40
|
||
|
val aFloat = 10.20e+4
|
||
|
var aBoolean = true
|
||
|
```
|
||
|
|
||
|
The datatype can be optionally specified by placing it before `var` or `val`.
|
||
|
|
||
|
```misti
|
||
|
Int val anInteger = 40
|
||
|
Float val aFloat = 10.20e+4
|
||
|
Bool var aBoolean = true
|
||
|
```
|
||
|
|
||
|
However, if the variable is a constant created with `val`,
|
||
|
this keyword is optional.
|
||
|
|
||
|
So, the following are equivalent.
|
||
|
|
||
|
```misti
|
||
|
Str val name = "Juan"
|
||
|
// is equivalent to
|
||
|
Str name = "Juan"
|
||
|
```
|
||
|
|
||
|
It is not possible to omit `var`. So the following will not mean the same.
|
||
|
|
||
|
```misti
|
||
|
Str var age = 20
|
||
|
// is not equivalent to
|
||
|
Str age = 20
|
||
|
|
||
|
// the previous statement is equivalent to:
|
||
|
// Str val age = 20
|
||
|
```
|
||
|
|
||
|
The second statement will declare a constant, not a variable.
|
||
|
|
||
|
|
||
|
## Assign a block to a variable
|
||
|
|
||
|
Assigning a block to a variable will execute the block,
|
||
|
and the last expression will be the value of the variable.
|
||
|
|
||
|
```misti
|
||
|
val roi =
|
||
|
val income = someIncomeCalculation()
|
||
|
val investment = 25000
|
||
|
income / investment // This will be the value of `roi`
|
||
|
```
|