Sobes.tech
Junior

Kotlin tilida null xavfsizligi nima ekanligini tushuntiring.

sobes.tech AI

AIdan javob

Null xavfsizligi — bu Kotlin tilining null referenslari bilan bog‘liq xatolarni oldini oladigan funksiyasidir. Bu ikki turdagi referenslar yaratish orqali amalga oshiriladi: nullable (nullga ruxsat berilgan) va non-nullable (nullga ruxsat berilmagan).

Non-nullable turlar odatdagi tarzda e'lon qilinadi:

var nonNullableString: String = "Hello" // null bo‘lishi mumkin emas

Nullable turlar esa tip nomidan keyin ? belgisidan foydalanib e'lon qilinadi:

var nullableString: String? = "Hello" // null bo‘lishi mumkin
nullableString = null

Kotlin nullable turlar bilan to‘g‘ridan-to‘g‘ri ularga murojaat qilishdan oldin null tekshiruvi qilishni talab qiladi. Buning uchun quyidagi mexanizmlar taqdim etilgan:

  1. Xavfsiz chaqirish operatori (?.): Ob'ekt null emasligini tekshirganda, metodni chaqiradi yoki xususiyatga murojaat qiladi; aks holda, null qaytaradi.

    val length = nullableString?.length // length `Int?` yoki `null`
    
  2. Elvis operatori (?:): Agar chap tarafdagi ifoda null bo‘lsa, standart qiymatni taqdim etadi.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength `Int`, nullableString null bo‘lsa 0
    
  3. !! - null bo‘lmagan tasdiqlash operatori: Nullable turini non-nullable ga o‘zgartiradi. Agar qiymat null bo‘lsa, NullPointerException xatosini chiqaradi. Bu, dasturchi qiymat null emasligiga ishonch hosil qilgan hollarda ishlatiladi.

    val sureLength = nullableString!!.length // nullableString null bo‘lsa, NullPointerException chiqaradi
    
  4. if tekshiruvi: An'anaviy null tekshiruvi bilan if ishlatiladi. Kompilyator null turini non-nullable ga aqlli tarzda o‘tkazadi (smart cast) agar tekshirish muvaffaqiyatli bo‘lsa.

    if (nullableString != null) {
        val length = nullableString.length // Bu yerda nullableString String sifatida qabul qilinadi
    }
    

Ushbu mexanizmlar, o‘zgaruvchi null bo‘lishi mumkin bo‘lgan holatlarni aniq boshqarishga imkon beradi va ishga tushirish vaqtida NullPointerException ehtimolini sezilarli darajada kamaytiradi.