Sobes.tech
Junior

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")
}