thp-web/md/learn/classes/definition.md

126 lines
1.6 KiB
Markdown

# Classes
Basically kotlin syntax.
## Create a new instance of a class
`new` not required, in fact, forbidden.
```thp
let dog = Dog()
```
## Simple class
Why'd you do this tho?
```thp
class SimpleClass
let instance = SimpleClass()
```
## Properties & methods
```thp
class SimpleClass
{
// Properties are private by default
mut String? name = ...
// Made public with `pub`
pub mut String? surname = ...
// Methods are private by default
fun display_name()
{
// `$` is used instead of $this. Mandatory
print($name)
}
pub fun get_name() -> String?
{
$name
}
}
```
## Static members
no
## Constructor
Kotlin style
```thp
class Cat(
// If a parameter has pub, protected or private they are promoted to properties
private String name,
pub mut Int lives = 9,
protected String surname = "Doe",
)
{
pub fun get_name() -> String
{
$name
}
pub fun die()
{
$lives -= 1
if $lives <= 0
{
print("Cat {$name} is death")
}
else
{
print("Cat {$name} is life still")
}
}
}
val michifu = Cat("Michifu")
print(michifu.get_name())
```
With kotlin's `init` block.
```thp
class Dog(pub String name)
{
Int name_length
init
{
print("Dog has been instantiated")
$name_length = name.length()
}
}
```
## Inheritance
Kotlin style
```thp
class Animal(pub String name)
{
pub fun say_name()
{
print($name)
}
}
class Cat(String name, Int lives) -> Animal(name)
Cat("Michi", 9).say_name()
```