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

1.6 KiB

Classes

Basically kotlin syntax.

Create a new instance of a class

new not required, in fact, forbidden.

let dog = Dog()

Simple class

Why'd you do this tho?

class SimpleClass

let instance = SimpleClass()

Properties & methods

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

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.

class Dog(pub String name)
{
    Int name_length

    init
    {
        print("Dog has been instantiated")
        $name_length = name.length()
    }
}

Inheritance

Kotlin style

class Animal(pub String name)
{
    pub fun say_name()
    {
        print($name)
    }
}

class Cat(String name, Int lives) -> Animal(name)

Cat("Michi", 9).say_name()