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
    

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.456thp
    
Semantic error: The variable `capital` was declared as `Value("String")` but its expression has type `Value("Float")` at line 2:8

Mutable variables

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

var name = "John"
var age = 32thp
    

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