5-bo‘lim

Shartlar va when

if ning ifoda ekani, when ning barcha shakllari - qiymat, diapazon, tur va shartsiz - hamda nega Kotlin da uchlik operator yo'q.

🕑 12 daqiqa o‘qish 📄 625 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. if
  2. if - bu ifoda
  3. when - qiymat bo'yicha
  4. when - ifoda sifatida
  5. Diapazon va shartlar
  6. Tur bo'yicha tekshirish
  7. when ichida o'zgaruvchi
  8. Blokli tarmoqlar
  9. Shartlarni birlashtirish
  10. Xulosa

Kotlin da shart tekshirishning ikki vositasi bor: tanish if va ancha kuchliroq when.

if #

KOTLIN
fun main() {
    val ball = 78

    if (ball >= 90) {
        println("A'lo")
    } else if (ball >= 70) {
        println("Yaxshi")
    } else {
        println("Qoniqarsiz")
    }
}
Natija
Yaxshi

Shakli boshqa tillardagidek. Lekin Kotlin da if ning yana bir xususiyati bor.

if - bu ifoda #

KOTLIN
fun main() {
    val yosh = 20

    val holat = if (yosh >= 18) "katta" else "kichik"
    println(holat)

    val kattasi = if (7 > 12) 7 else 12
    println(kattasi)

    val baho = if (yosh > 100) {
        "juda katta"
    } else {
        "normal"
    }
    println(baho)
}
Natija
katta
12
normal

if qiymat qaytaradi. Blok shaklida oxirgi qator qaytariladigan qiymat bo'ladi.

Kotlin da ?: uchlik operatori yo'q

Ko'p tillarda shart ? a : b degan qisqartma bor. Kotlin da u yo'q - chunki kerak emas.

if (shart) a else b aynan shu vazifani bajaradi va o'qishga osonroq.

Diqqat: ?: belgisi Kotlin da ham bor, lekin u butunlay boshqa narsa - "null bo'lsa buni ol" degani. Uni 8-bo'limda ko'ramiz.

Ifoda sifatida else majburiy

val x = if (shart) 5 deb yozib bo'lmaydi.

Kompilyator so'raydi: shart bajarilmasa x ga nima tushadi? Shuning uchun ifoda sifatida ishlatilganda else shart.

Oddiy ko'rsatma sifatida (qiymat qaytarmasa) esa else ixtiyoriy.

when - qiymat bo'yicha #

KOTLIN
fun main() {
    val kun = 6

    when (kun) {
        1 -> println("Dushanba")
        2, 3, 4 -> println("Hafta o'rtasi")
        5 -> println("Juma")
        6, 7 -> println("Dam olish kuni")
        else -> println("Noto'g'ri kun")
    }
}
Natija
Dam olish kuni

when - switch ning o'rnini bosadi, lekin ancha kuchliroq:

  • Har bir tarmoq avtomatik tugaydi - break yozish kerak emas.
  • Bir tarmoqda bir nechta qiymat: 2, 3, 4 ->.
  • Har qanday tur bilan ishlaydi, faqat son va satr emas.

when - ifoda sifatida #

KOTLIN
fun main() {
    val kun = 3

    val nomi = when (kun) {
        1 -> "Dushanba"
        2 -> "Seshanba"
        3 -> "Chorshanba"
        else -> "boshqa kun"
    }

    println(nomi)
    println(nomi.length)
}
Natija
Chorshanba
10

Ifoda sifatida ishlatilganda else majburiy - kompilyator hamma holat qamrab olinganiga ishonch hosil qilishi kerak.

Diapazon va shartlar #

KOTLIN
fun main() {
    val harorat = 27

    val tavsif = when (harorat) {
        in Int.MIN_VALUE..-1 -> "Sovuq"
        in 0..15 -> "Salqin"
        in 16..25 -> "Iliq"
        in 26..35 -> "Issiq"
        else -> "Juda issiq"
    }

    println(tavsif)

    val son = 15
    when {
        son % 15 == 0 -> println("FizzBuzz")
        son % 3 == 0 -> println("Fizz")
        son % 5 == 0 -> println("Buzz")
        else -> println(son)
    }
}
Natija
Issiq
FizzBuzz

Ikkinchi when da argument yo'q. Bunday shaklda har bir tarmoq o'zining to'liq shartini yozadi - bu uzun if/else if zanjirining o'rnini bosadi.

ShaklMa'nosi
5 ->Aynan teng
1, 2, 3 ->Sanoqdagilardan biri
in 1..10 ->Diapazonda
!in 1..10 ->Diapazondan tashqarida
is String ->Shu turdagi
shart ->Argumentsiz shaklda ixtiyoriy shart
else ->Qolgan hamma holat

Tur bo'yicha tekshirish #

KOTLIN
fun tavsifla(qiymat: Any): String = when (qiymat) {
    is Int -> "Butun son: ${qiymat + 1}"
    is Double -> "Kasr son: ${qiymat * 2}"
    is String -> "Matn, uzunligi ${qiymat.length}"
    is Boolean -> "Mantiqiy: $qiymat"
    is List<*> -> "Ro'yxat, ${qiymat.size} element"
    else -> "Noma'lum tur"
}

fun main() {
    println(tavsifla(42))
    println(tavsifla(2.5))
    println(tavsifla("salom"))
    println(tavsifla(true))
    println(tavsifla(listOf(1, 2, 3)))
}
Natija
Butun son: 43
Kasr son: 5.0
Matn, uzunligi 5
Mantiqiy: true
Ro'yxat, 3 element
Aqlli aylantirish (smart cast)

Diqqat qiling: is Int -> tarmog'ida qiymat + 1 deb yozildi - hech qanday aylantirish yo'q.

Kompilyator is tekshiruvidan keyin qiymat aniq Int ekanini biladi va o'zi aylantiradi. Bu aqlli aylantirish deb ataladi va Kotlin ni Java dan ajratib turadigan qulayliklardan biri.

Java da bu yerda ((Integer) qiymat) + 1 yozish kerak bo'lardi.

when ichida o'zgaruvchi #

KOTLIN
fun ball(): Int = 85

fun main() {
    val natija = when (val b = ball()) {
        in 90..100 -> "A'lo ($b)"
        in 70..89 -> "Yaxshi ($b)"
        else -> "Past ($b)"
    }
    println(natija)
}
Natija
Yaxshi (85)

when (val b = ...) - funksiya bir marta chaqiriladi va natijasi hamma tarmoqda ishlatiladi.

Blokli tarmoqlar #

KOTLIN
fun main() {
    val buyruq = "saqlash"

    val javob = when (buyruq) {
        "ochish" -> {
            val nom = "hisobot.txt"
            "Ochilmoqda: $nom"
        }
        "saqlash", "yozish" -> {
            val vaqt = "10:30"
            "Saqlandi, vaqt: $vaqt"
        }
        else -> "Noma'lum buyruq"
    }

    println(javob)
}
Natija
Saqlandi, vaqt: 10:30

Tarmoq blok bo'lsa, oxirgi qator qaytariladigan qiymat bo'ladi.

Shartlarni birlashtirish #

KOTLIN
fun main() {
    val yosh = 25
    val stajYil = 3
    val guvohnoma = true

    if (yosh >= 21 && stajYil >= 2 && guvohnoma) {
        println("Ishga qabul qilinadi")
    } else {
        println("Talablarga javob bermaydi")
    }

    println(yosh in 18..65)
    println(yosh !in 0..17)
}
Natija
Ishga qabul qilinadi
true
true
BelgiMa'nosi
&&Va - chapdagi false bo'lsa, o'ngdagi hisoblanmaydi
||Yoki - chapdagi true bo'lsa, o'ngdagi hisoblanmaydi
!Emas
in / !inDiapazon yoki to'plamda bormi

in belgisi juda qulay: yosh >= 18 && yosh <= 65 o'rniga yosh in 18..65 deb yozish mumkin.

Amaliy topshiriq
  1. Ball bo'yicha baho qo'yadigan if yozing.
  2. O'sha mantiqni if ifodasi sifatida qayta yozing.
  3. val x = if (shart) 5 deb yozib, xatoni o'qing.
  4. Oy raqamiga qarab fasl nomini when bilan chiqaring.
  5. when ni ifoda sifatida ishlatib, natijani o'zgaruvchiga oling.
  6. in 1..10 va !in shakllarini sinang.
  7. Argumentsiz when bilan FizzBuzz yozing.
  8. Any turidagi qiymatni is bilan ajrating.
  9. Aqlli aylantirish ishlashini is String -> qiymat.length bilan tekshiring.
  10. when (val b = ...) shaklini o'z misolingizda ishlating.

Xulosa #

  • if Kotlin da ifoda - u qiymat qaytaradi.
  • Ifoda sifatida ishlatilganda else majburiy.
  • Kotlin da uchlik operator yo'q - if/else uning o'rnini bosadi.
  • when - switch dan kuchliroq: break kerak emas, bir tarmoqda bir nechta qiymat bo'ladi.
  • when diapazon (in 1..10), tur (is String) va shartsiz shaklda ishlaydi.
  • Aqlli aylantirish: is tekshiruvidan keyin qo'shimcha aylantirish yozilmaydi.
  • Blokli tarmoqda oxirgi qator qaytariladi.
  • x in 18..65 - ikkita solishtirishning qisqa va o'qishli shakli.

Keyingi bo'limda sikllar va diapazonlarni ko'ramiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.