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 = 1984thp

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 valuethp
Compilation error: error code 25

Datatype annotation

Written after the val keyword but before the variable name.

val String surname = "Doe"
val Int year_of_birth = 1984thp

When annotating an immutable variable the val keyword is optional

// Equivalent to the previous code
String surname = "Doe"
Int year_of_birth = 1984thp

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
Compilation error: error code 22

Mutable variables

Defined with var, followed by a variable name and a value.

var name = "John"
var age = 32

age = 33thp

Datatype annotation

Written after the var keywords but before the variable name.

var String name = "John"
var Int age = 32thp

When annotating a mutable variable the keyword var is still required.

// Equivalent to the previous code
var String name = "John"
var Int age = 32thp