Sobes.tech
Junior

Cum se descriu funcțiile în Kotlin?

sobes.tech AI

Răspuns de la AI

Funcțiile sunt declarate folosind cuvântul cheie fun, urmat de numele funcției, lista de parametri între paranteze (opțional), două puncte și tipul de returnare (opțional). Corpul funcției este între acolade. Dacă tipul de returnare este omis, funcția returnează Unit (echivalent cu void în alte limbaje).

// Funcție fără parametri și fără valoare de returnare
fun greet() {
    println("Hello!")
}

// Funcție cu parametri
fun add(x: Int, y: Int): Int {
    return x + y
}

// Funcție cu o singură expresie (sintaxă de corp scurt)
fun multiply(a: Int, b: Int) = a * b

Parametrii funcției sunt declarați în formatul numeParametru: Tip. Se pot specifica valori implicite pentru parametri.

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

Funcțiile pot fi declarate la nivel superior fișierului sau ca membri ai claselor, obiectelor sau interfețelor.

  • Funcții de nivel superior: Declarate în afara claselor.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Funcții membre: Declarate în interiorul claselor.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Funcții de extensie: Permite "adăugarea" de funcții la clase existente fără a modifica codul sursă.

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

Expresiile lambda și funcțiile anonime reprezintă literale funcționale care pot fi transmise ca argumente sau atribuite variabilelor.

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

Funcțiile de ordin superior acceptă funcții ca parametri sau returnează funcții.

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

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

Suprasarcina funcțiilor (diferite funcții cu același nume, dar semnături diferite) este suportată automat.

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

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