Sobes.tech
Junior

Come si descrivono le funzioni in Kotlin?

sobes.tech AI

Risposta dell'AI

Le funzioni vengono dichiarate usando la parola chiave fun, seguita dal nome della funzione, dalla lista di parametri tra parentesi (opzionale), due punti e dal tipo di ritorno (opzionale). Il corpo della funzione è racchiuso tra parentesi graffe. Se il tipo di ritorno viene omesso, la funzione restituisce Unit (equivalente a void in altri linguaggi).

// Funzione senza parametri e senza valore di ritorno
fun greet() {
    println("Hello!")
}

// Funzione con parametri
fun add(x: Int, y: Int): Int {
    return x + y
}

// Funzione con un'espressione singola (sintassi di corpo abbreviato)
fun multiply(a: Int, b: Int) = a * b

I parametri della funzione sono dichiarati nel formato nomeParametro: Tipo. È possibile specificare valori predefiniti per i parametri.

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

Le funzioni possono essere dichiarate a livello superiore del file o come membri di classi, oggetti o interfacce.

  • Funzioni di livello superiore: Dichiarate fuori dalle classi.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Funzioni membro: Dichiarate all'interno di classi.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Funzioni di estensione: Permettono di "aggiungere" funzioni a classi esistenti senza modificarne il codice sorgente.

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

Le espressioni lambda e le funzioni anonime sono letterali funzionali che possono essere passati come argomenti o assegnati a variabili.

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

Le funzioni di ordine superiore accettano funzioni come parametri o restituiscono funzioni.

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

Il sovraccarico di funzioni (funzioni diverse con lo stesso nome ma firme diverse) è supportato automaticamente.

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

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