Sobes.tech
Junior

Ako sa v Kotlinu opisujú funkcie?

sobes.tech AI

Odpoveď od AI

Funkcie sa deklarujú pomocou kľúčového slova fun, za ktorým nasleduje názov funkcie, zoznam parametrov v zátvorkách (voliteľné), dvojbodka a návratový typ (voliteľné). Telo funkcie je uzavreté v zložených zátvorkách. Ak je vynechaný návratový typ, funkcia vracia Unit (ekvivalent void v iných jazykoch).

// Funkcia bez parametrov a návratovej hodnoty
fun greet() {
    println("Hello!")
}

// Funkcia s parametrami
fun add(x: Int, y: Int): Int {
    return x + y
}

// Funkcia s jedným výrazom (skrátená syntax)
fun multiply(a: Int, b: Int) = a * b

Parametre funkcie sa deklarujú vo formáte názovParametra: Typ. Môžu sa nastaviť predvolené hodnoty parametrov.

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

Funkcie môžu byť deklarované na úrovni súboru alebo ako členovia tried, objektov alebo rozhraní.

  • Top-level funkcie: Deklarujú sa mimo tried.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Členové funkcie: Deklarujú sa vo vnútri tried.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Rozšírené funkcie: Umožňujú "pridať" funkcie existujúcim triedam bez zmeny ich pôvodného kódu.

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

Lambda výrazy a anonymné funkcie predstavujú funkcionálne literály, ktoré môžu byť odovzdané ako argumenty alebo priradené premenným.

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

Funkcie vyššieho rádu prijímajú funkcie ako parametre alebo vracajú funkcie.

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

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

Preťažovanie funkcií (rôzne funkcie s rovnakým menom, ale odlišnými signatúrami) je automaticky podporované.

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

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