Variables
THP distinguishes between mutable and immutable variables.
Variables must be declared in THP to avoid issues with scoping and to know if they are mutable/immutable. It’s a compile error to use undeclared variables.
Variable names don’t start with a dollar sign $
.
Variable names must begin with a lowercase letter or an underscore. Then they may contain lowercase/uppercase letters, numbers and underscores.
As a regex: [a-z_][a-zA-Z0-9_]*
Immutable variables
Defined with val
, followed by a variable name and a value.
val surname = "Doe"
val year_of_birth = 1984
thp
It’s a compile error to attempt to modify it
val surname = "Doe"
surname = "Dane" // Error
╰╴This variable is immutable, therefore it cannot be assigned a new value
thp
Datatype annotation
Written after the val
keyword but before the variable name.
val String surname = "Doe"
val Int year_of_birth = 1984
thp
When annotating an immutable variable the val
keyword is optional
// Equivalent to the previous code
String surname = "Doe"
Int year_of_birth = 1984
thp
This means that if a variable only has a datatype, it is immutable.
It is a compile error to declare a variable of a datatype, but use another.
// Declare the variable as a String, but use a Float as its value
String capital = 123.456
╰╴The variable is declared as Value("String") here
╰╴But this expression has type Value("Float")
thp
Mutable variables
Defined with var
, followed by a variable name and a value.
var name = "John"
var age = 32
age = 33
thp
Datatype annotation
Written after the var
keywords but before the variable name.
var String name = "John"
var Int age = 32
thp
When annotating a mutable variable the keyword var
is still required.
// Equivalent to the previous code
var String name = "John"
var Int age = 32
thp