Sobes.tech
Junior

Kotlin'da funksiyalar qanday tavsiflanadi?

sobes.tech AI

AIdan javob

Funktsiyalar fun kalit so'zi yordamida e'lon qilinadi, unga funksiyaning nomi, parametrlardan iborat ro'yxat (ixtiyoriy), ikki nuqta va qaytish turi (ixtiyoriy) qo'shiladi. Funktsiya tanasi qavs ichida bo'ladi. Agar qaytish turi qoldirilsa, funksiya Unit ni qaytaradi (boshqa tillardagi void ga teng).

// Parametrlar va qaytish qiymati bo'lmagan funksiya
fun greet() {
    println("Hello!")
}

// Parametrlar bilan funksiya
fun add(x: Int, y: Int): Int {
    return x + y
}

// Bir ifoda bilan funksiya (qisqa sintaksis)
fun multiply(a: Int, b: Int) = a * b

Funksiya parametrlarini nomParametr: Tip formatida e'lon qilish mumkin. Standart qiymatlarni belgilash mumkin.

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

Funksiyalar faylning yuqori darajasida yoki sinflar, obyektlar yoki interfeyslar a'zolari sifatida e'lon qilinishi mumkin.

  • Yuqori darajadagi funksiyalar: Sinflar tashqarisida e'lon qilinadi.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • A'zo funksiyalar: Sinflar ichida e'lon qilinadi.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Kengaytirish funksiyalari: Mavjud sinflarga funksiyalarni qo'shish imkonini beradi, ularning manba kodini o'zgartirmasdan.

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

Lambda ifodalar va nomzod funksiyalar funksional litralar bo'lib, ular argument sifatida uzatilishi yoki o'zgaruvchilarga tayinlanishi mumkin.

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

Yuqori darajali funksiyalar funksiyalarni parametr sifatida qabul qiladi yoki funksiyalarni qaytaradi.

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

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

Funksiya ortiqcha yuklanishi (bir xil nomli, ammo turli imzolar bilan funksiyalar) avtomatik tarzda qo'llab-quvvatlanadi.

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

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