Sobes.tech
Junior

Hoe worden functies beschreven in Kotlin?

sobes.tech AI

Antwoord van AI

Functies worden gedeclareerd met het sleutelwoord fun, gevolgd door de naam van de functie, een optionele lijst van parameters tussen haakjes, een dubbele punt en het retourtype (optioneel). De body van de functie staat tussen accolades. Als het retourtype wordt weggelaten, geeft de functie Unit terug (het equivalent van void in andere talen).

// Functie zonder parameters en zonder returnwaarde
fun greet() {
    println("Hello!")
}

// Functie met parameters
fun add(x: Int, y: Int): Int {
    return x + y
}

// Functie met één uitdrukking (verkorte syntax)
fun multiply(a: Int, b: Int) = a * b

Parameters van de functie worden gedeclareerd in het formaat naamParameter: Type. Het is mogelijk om standaardwaarden voor parameters op te geven.

fun sendMessage(message: String, sender: String = "Unknown") {
    println("$sender: $message")
}

Functies kunnen op het hoogste niveau van het bestand worden gedeclareerd of als leden van klassen, objecten of interfaces.

  • Top-level functies: Worden buiten klassen gedeclareerd.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Lidfuncties: Worden binnen klassen gedeclareerd.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Extensiefuncties: Stellen je in staat om "toe te voegen" functies aan bestaande klassen zonder de broncode te wijzigen.

    fun String.reverseAndUpperCase(): String {
        return this.reversed().toUpperCase()
    }
    

Lambda-uitdrukkingen en anonieme functies zijn functionele literalen die als argumenten kunnen worden doorgegeven of aan variabelen kunnen worden toegewezen.

val sum: (Int, Int) -> Int = { x, y -> x + y }
val greeting = { name: String -> "Hello, $name!" }

Hogere-orde functies accepteren functies als parameters of geven functies terug.

fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

val result = operate(5, 3, { x, y -> x * y }) // resultaat = 15

Functies overbelasting (verschillende functies met dezelfde naam, maar verschillende handtekeningen) wordt automatisch ondersteund.

fun printInfo(name: String) {
    println("Name: $name")
}

fun printInfo(age: Int) {
    println("Age: $age")
}