Sobes.tech
Junior

Τι είναι οι τύποι 'nullable' στο Kotlin και πώς λειτουργούν;

sobes.tech AI

Απάντηση από AI

Kotlin-да nullable типлар — бу, қиммат ёки null бўлиши мумкин бўлган типлардир. Улар аниқ белгилаш учун, тур номидан кейин ? символи қўйилади.

Ишлаш тизими, Kotlinнинг турлар тизимига асосланган бўлиб, у NullPointerException-ни компиляция вақтида олдини олади. Компилятор, nullable турдаги объектнинг аъзоларига мурожаат қилишдан олдин, аниқ null текширувини талаб қилади.

Nullable типлар билан хавфсиз ишлашнинг асосий усуллари:

  • null текшируви if орқали:

    fun printLength(str: String?) {
        if (str != null) {
            println(str.length) // Null текширувдан кейин хавфсиз чақириш
        } else {
            println("String null")
        }
    }
    
  • Хавфсиз чақириш оператори (?.): Агар объект null бўлса, null қайтариб, акс ҳолда чақириш натижасини қайтариб беради.

    val safeLength: Int? = str?.length // Агар str null бўлса, safeLength null бўлади
    
  • Elvis оператори (?:): Агар олги ифода null бўлса, стандарт қийматни таъминлайди.

    val lengthOrDefault: Int = str?.length ?: 0 // Агар str null бўлса, lengthOrDefault 0 бўлади
    
  • Аниқ null эмаслигини тасдиқловчи оператор (!!): Nullable турни null эмас турга айлантиради. Эҳтиёт бўлиш керак, чунки агар қиймат null бўлса, NullPointerException юзага келтиради.

    val assertedLength: Int = str!!.length // Агар str null бўлса, NPE юзага келтиради
    
  • let/run/apply/also функциялари ва хавфсиз чақириш:

    str?.let {
        // Код фақат `str` null эмас бўлганда ишга тушади
        println("Қатор узунлиги: ${it.length}")
    }
    

Kotlin-да nullable типлар тизими, хавфсизликни сезиларли даражада оширади ва null-нинг ҳар қандай турга аниқ белгиланмасдан тайинланишига йўл қўймайди, бу эса NullPointerException эҳтимолини камайтиради.