Sobes.tech
Junior

Как се описват функциите в Kotlin?

sobes.tech AI

Отговор от AI

Функциите се обявяват с ключовата дума fun, последвана от името на функцията, списък с параметри в скоби (по желание), двоеточие и типа на връщане (по желание). Тялото на функцията е в къдрави скоби. Ако типът на връщане е пропуснат, функцията връща Unit (еквивалент на void в други езици).

// Функция без параметри и без стойност за връщане
fun greet() {
    println("Hello!")
}

// Функция с параметри
fun add(x: Int, y: Int): Int {
    return x + y
}

// Функция с едно изразяване (съкратен синтаксис)
fun multiply(a: Int, b: Int) = a * b

Параметрите на функцията се обявяват във формат имеПараметър: Тип. Могат да се задават стойности по подразбиране.

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

Функциите могат да бъдат обявени на ниво файл или като членове на класове, обекти или интерфейси.

  • Функции на ниво файл: Обявяват се извън класове.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Членови функции: Обявяват се вътре в класове.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Функции за разширение: Позволяват "да добавите" функции към съществуващи класове без да променяте техния изходен код.

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

Ламбда изразите и анонимните функции представляват функционални литерали, които могат да бъдат предавани като аргументи или присвоявани на променливи.

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

Функциите от по-висок ред приемат функции като параметри или връщат функции.

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

val result = operate(5, 3, { x, y -> x * y }) // резултат = 15

Пренатоварването на функции (различни функции с едно и също име, но различни сигнатури) се поддържа автоматично.

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

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