Sobes.tech
Junior

Jak se v Kotlinu popisují funkce?

sobes.tech AI

Odpověď od AI

Funkce jsou deklarovány pomocí klíčového slova fun, za kterým následuje název funkce, seznam parametrů v závorkách (volitelně), dvojtečka a návratový typ (volitelně). Tělo funkce je uzavřeno v složených závorkách. Pokud je vynechán návratový typ, funkce vrací Unit (ekvivalent void v jiných jazycích).

// Funkce bez parametrů a bez návratové hodnoty
fun greet() {
    println("Hello!")
}

// Funkce s parametry
fun add(x: Int, y: Int): Int {
    return x + y
}

// Funkce s jedním výrazem (zkrácená syntaxe)
fun multiply(a: Int, b: Int) = a * b

Parametry funkce jsou deklarovány ve formátu názevParametru: Typ. Je možné specifikovat výchozí hodnoty parametrů.

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

Funkce mohou být deklarovány na úrovni souboru nebo jako členové tříd, objektů nebo rozhraní.

  • Funkce na úrovni souboru: Deklarují se mimo třídy.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Členové funkce: Deklarují se uvnitř tříd.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Rozšiřující funkce: Umožňují "přidat" funkce ke stávajícím třídám bez změny jejich zdrojového kódu.

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

Lambda výrazy a anonymní funkce jsou funkcionální literály, které lze předat jako argumenty nebo přiřadit proměnným.

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

Funkce vyššího řádu přijímají funkce jako parametry nebo vracejí funkce.

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

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

Přetížení funkcí (různé funkce se stejným názvem, ale různými signaturami) je automaticky podporováno.

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

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