Sobes.tech
Junior

Ի՞նչ են 'nullable' տիպերը Kotlin-ում և ինչպես են աշխատում:

sobes.tech AI

Պատասխան AI-ից

Kotlin- ում nullable տիպերը այն տիպերն են, որոնք կարող են պարունակել ինչպես արժեք, այնպես էլ null։ Դրանք հստակ նշվում են ? նշանով՝ տիպի անունից հետո։

Աշխատանքային համակարգը հիմնված է Kotlin-ի տիպային համակարգի վրա, որը կանխում է NullPointerException-ը կոմպիլյացիայի ժամանակ։ Կոմպիլյատորը պահանջում է բացահայտ null ստուգում՝ նախքան մուտք գործել nullable տիպի օբյեկտի անդամներին։

Նվազագույն միջոցները անվտանգ աշխատելու համար 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
    
  • 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 տիպերի համակարգը զգալիորեն բարձրացնում է անվտանգությունը և նվազեցնում է NullPointerException-ի հավանականությունը՝ համեմատած այն լեզուների հետ, որտեղ null-ը կարող է նշանակվել ցանկացած տիպի առանց բացահայտ նշման։