Jak opisywać funkcje w Kotlinie?
sobes.tech AI
Odpowiedź od AI
Funkcje są deklarowane za pomocą słowa kluczowego fun, po którym następuje nazwa funkcji, lista parametrów w nawiasach (opcjonalnie), dwukropek i typ zwracany (opcjonalnie). Ciało funkcji znajduje się w nawiasach klamrowych. Jeśli pominięty jest typ zwracany, funkcja zwraca Unit (odpowiednik void w innych językach).
// Funkcja bez parametrów i bez wartości zwracanej
fun greet() {
println("Hello!")
}
// Funkcja z parametrami
fun add(x: Int, y: Int): Int {
return x + y
}
// Funkcja z jednym wyrażeniem (skrócona składnia)
fun multiply(a: Int, b: Int) = a * b
Parametry funkcji deklaruje się w formacie nazwaParametru: Typ. Można podać wartości domyślne dla parametrów.
fun sendMessage(message: String, sender: String = "Unknown") {
println("$sender: $message")
}
Funkcje mogą być deklarowane na poziomie górnym pliku lub jako członkowie klas, obiektów lub interfejsów.
-
Funkcje na poziomie górnym: Deklarowane poza klasami.
fun calculateArea(radius: Double): Double { return Math.PI * radius * radius } -
Funkcje członkowskie: Deklarowane wewnątrz klas.
class MyClass { fun doSomething() { println("Doing something.") } } -
Funkcje rozszerzające: Pozwalają "dodać" funkcje do istniejących klas bez zmiany ich kodu źródłowego.
fun String.reverseAndUpperCase(): String { return this.reversed().toUpperCase() }
Wyrażenia lambda i funkcje anonimowe to literały funkcyjne, które mogą być przekazywane jako argumenty lub przypisywane do zmiennych.
val sum: (Int, Int) -> Int = { x, y -> x + y }
val greeting = { name: String -> "Hello, $name!" }
Funkcje wyższego rzędu przyjmują funkcje jako parametry lub zwracają funkcje.
fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
val result = operate(5, 3, { x, y -> x * y }) // wynik = 15
Przeciążanie funkcji (różne funkcje o tej samej nazwie, ale różnych sygnaturach) jest obsługiwane automatycznie.
fun printInfo(name: String) {
println("Name: $name")
}
fun printInfo(age: Int) {
println("Age: $age")
}