Sobes.tech
Junior

Kako se opisuju funkcije u Kotlinu?

sobes.tech АИ

Одговор од АИ

Funkcije se deklariraju pomoću ključne riječi fun, nakon čega slijedi ime funkcije, lista parametara u zagradama (opcionalno), dvotočka i tip povratne vrijednosti (opcionalno). Tijelo funkcije je u vitičastim zagradama. Ako je tip povratne vrijednosti izostavljen, funkcija vraća Unit (ekvivalent void u drugim jezicima).

// Funkcija bez parametara i bez povratne vrijednosti
fun greet() {
    println("Hello!")
}

// Funkcija s parametrima
fun add(x: Int, y: Int): Int {
    return x + y
}

// Funkcija s jednom izrazom (skraćeni sintaksis)
fun multiply(a: Int, b: Int) = a * b

Parametri funkcije se deklariraju u formatu imeParametra: Tip. Mogu se navesti zadane vrijednosti za parametre.

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

Funkcije se mogu deklarirati na vrhu datoteke ili kao članovi klasa, objekata ili sučelja.

  • Funkcije na vrhu: Deklariraju se izvan klasa.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Član funkcije: Deklariraju se unutar klasa.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Funkcije proširenja: Omogućuju "dodavanje" funkcija postojećim klasama bez izmjene njihovog izvornog koda.

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

Lambda izrazi i anonimne funkcije predstavljaju funkcionalne literale koje se mogu proslijediti kao argumenti ili dodijeliti varijablama.

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

Funkcije višeg reda prihvaćaju funkcije kao parametre ili vraćaju funkcije.

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

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

Preopterećenje funkcija (različite funkcije s istim imenom, ali različitim potpisima) automatski je podržano.

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

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