Kuidas kirjeldatakse funktsioone Kotlinis?
sobes.tech AI
Vastus AI-lt
Funktsioonid deklareeritakse kasutades märksõna fun, millele järgneb funktsiooni nimi, parameetrite loend sulgudes (valikuline), koolon ja tagastustüüp (valikuline). Funktsiooni keha on ümbritsetud koodilõikudega. Kui tagastustüüp on jäetud välja, tagastab funktsioon Unit (vastab void teiste keelte puhul).
// Funktsioon ilma parameetrite ja tagastatud väärtuseta
fun greet() {
println("Hello!")
}
// Funktsioon parameetritega
fun add(x: Int, y: Int): Int {
return x + y
}
// Ühe avaldisega funktsioon (lühendatud keha süntaks)
fun multiply(a: Int, b: Int) = a * b
Funktsiooni parameetrid deklareeritakse formaadis nimi:Tüüp. Võib määrata vaikimisi väärtusi:
fun sendMessage(message: String, sender: String = "Unknown") {
println("$sender: $message")
}
Funktsioone saab deklareerida faili tipp-tasemel või klasside, objektide või liideste liikmetena:
-
Top-level funktsioonid: Deklareerivad väljaspool klasse:
fun calculateArea(radius: Double): Double { return Math.PI * radius * radius } -
Liikme funktsioonid: Deklareerivad klasside sees:
class MyClass { fun doSomething() { println("Doing something.") } } -
Laiendatud funktsioonid: Annab võimaluse "lisada" funktsioone olemasolevatele klassidele ilma nende algset koodi muutmata:
fun String.reverseAndUpperCase(): String { return this.reversed().toUpperCase() }
Lambda väljendid ja anonüümfunktsioonid on funktsionaalsed kirjelduvad, mida saab edasi anda argumentidena või määrata muutujatele:
val sum: (Int, Int) -> Int = { x, y -> x + y }
val greeting = { name: String -> "Hello, $name!" }
Ülespoole funktsioonid võtavad funktsioone parameetritena või tagastavad funktsioone:
fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
val result = operate(5, 3, { x, y -> x * y }) // tulemus = 15
Funktsioonide ülekoormus (samal nimel, kuid erinevate signatuuridega funktsioonid) on automaatselt toetatud:
fun printInfo(name: String) {
println("Name: $name")
}
fun printInfo(age: Int) {
println("Age: $age")
}