Sobes.tech
Junior

Таврҳои 'nullable' дар Kotlin чистанд ва чӣ гуна кор мекунанд?

sobes.tech AI

Ҷавоб аз AI

Кодҳои nullable дар Kotlin навъҳое мебошанд, ки метавонанд ҳам арзиш ва ҳам null дошта бошанд. Онҳо ба таври равшан бо рамзи ? пас аз номи навъ нишон дода мешаванд.

Фаъолият асос ёфтааст ба системаи навъҳои Kotlin, ки пешгирӣ мекунад NullPointerException дар вақти компилятсия. Компилятор талаб мекунад, ки пеш аз дастрасӣ ба аъзои объектҳои nullable, санҷиши равшан барои null анҷом дода шавад.

Роҳҳои асосии кор бо навъҳои nullable:

  • Санҷиши null бо истифодаи if:

    fun printLength(str: String?) {
        if (str != null) {
            println(str.length) // Даъвати бехатари пас аз санҷиши null
        } else {
            println("Рамз null")
        }
    }
    
  • Оператори даъвати бехатари (?.): Вақте объект null бошад, null бармегардонад, дар ғайри ҳол натиҷаи даъватро.

    val safeLength: Int? = str?.length // Агар str null бошад, safeLength null мешавад
    
  • Оператори Элвис (?:): Имкон медиҳад, ки арзиши пешфарзро таъмин кунад агар израз дар тарафи чапи оператор 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}")
    }
    

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