Sobes.tech
Junior

Агар ба майдони nullable-и объект дар Kotlin муроҷиат кунед, чӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

Агар ба майдони nullable-и объект бе санҷиши null дастрасӣ ёбед, ба NullPointerException (NPE) меафтад.

Барои дастрасии бехатар, метавонед ба ин роҳҳо муроҷиат кунед:

  1. Оператори даъвати бехатар (?.): Агар объект null бошад, null бармегардонад, дар ғайри ҳол, даъватро иҷро мекунад.

    // Бигзор, ки user? User?
    val userName: String? = user?.name
    
  2. Оператори тасдиқи бенул (!!): Ба равшанӣ тасдиқ мекунад, ки объект null нест. Агар бошад, NullPointerException меандозад.

    // Боварӣ ҳосил кунед, истифодаи ҳушёр, метавонад ба NPE оварда расонад
    val userName: String = user!!.name
    
  3. Оператори Елвис (?:): Агар объект дар тарафи чап null бошад, арзиши пешфарз медиҳад.

    val userName: String = user?.name ?: "Истифодабарандаи ношинохта"
    
  4. Блокҳои if ё when: Санҷиши ошкоро барои null.

    if (user != null) {
        val userName = user.name
    } else {
        // Ҳал кардани ҳолат, ки user null аст
    }
    
  5. Функсияҳои let, run, apply, with бо даъвати бехатар:

    user?.let {
        // `it` дар ин блок як `User` не-null аст
        val userName = it.name
    }
    

Интихоби роҳ ба логикаи барнома ва рафтори дархостшуда дар ҳолати объект null вобаста аст. Аксар вақт, тавсия дода мешавад, ки оператори даъвати бехатар (?.) ё оператори Елвис (?:) барои пешгирӣ аз NPE истифода шаванд. Оператор !! бояд бо эҳтиёт истифода шавад.