101 lines
1.2 KiB
Markdown
101 lines
1.2 KiB
Markdown
# Declaration
|
|
|
|
|
|
## No parameters, no return
|
|
|
|
```thp
|
|
fun say_hello()
|
|
{
|
|
print("Hello")
|
|
}
|
|
|
|
say_hello()
|
|
```
|
|
|
|
|
|
## With return type
|
|
|
|
```thp
|
|
fun get_random_number() -> Int
|
|
{
|
|
Random::get(0, 35_222)
|
|
}
|
|
|
|
val number = get_random_number()
|
|
```
|
|
|
|
## With parameters and return type
|
|
|
|
```thp
|
|
fun get_secure_random_number(Int min, Int max) -> Int
|
|
{
|
|
Random::get_secure(min, max)
|
|
}
|
|
|
|
val number = get_secure_random_number(0, 65535)
|
|
```
|
|
|
|
|
|
## Generic types
|
|
|
|
```thp
|
|
fun get_first_item[T](Array[T] array) -> T
|
|
{
|
|
array[0]
|
|
}
|
|
|
|
val first = get_first_item[Int](numbers)
|
|
// The type annotation is optional if the compiler can infer the type
|
|
|
|
val first = get_first_item(numbers)
|
|
```
|
|
|
|
|
|
## Signature
|
|
|
|
|
|
```thp
|
|
() -> ()
|
|
() -> Int
|
|
(Int, Int) -> Int
|
|
[T](Array[T]) -> T
|
|
```
|
|
|
|
|
|
## Named arguments
|
|
|
|
```thp
|
|
fun html_special_chars(
|
|
String input,
|
|
Int? flags,
|
|
String? encoding,
|
|
Bool? double_encoding,
|
|
) -> String
|
|
{
|
|
// ...
|
|
}
|
|
|
|
html_special_chars(input, double_encoding: false)
|
|
```
|
|
|
|
TBD: If & how named arguments affect the order of the parameters
|
|
|
|
## Named arguments with different names
|
|
|
|
```thp
|
|
fun greet(
|
|
String name,
|
|
String from: city,
|
|
)
|
|
{
|
|
print("Hello {name} from {city}!")
|
|
}
|
|
|
|
greet(name: "John", from: "LA")
|
|
```
|
|
|
|
|
|
|
|
|
|
|