Sobes.tech
Junior

Kotlin-ში 'nullable' ტიპები რა არის და როგორ მუშაობენ?

sobes.tech AI

პასუხი AI-სგან

Nullable ტიპები Kotlin-те — მნიშვნელობა შეიძლება იყოს ან 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
    
  • ელვის ოპერატორი (?:): საშუალებას აძლევს დართოს მნიშვნელობა, თუ გამოხატულება მარცხნივ არის null.

    val lengthOrDefault: Int = str?.length ?: 0 // თუ str null-ია, lengthOrDefault იქნება 0
    
  • ნათელი არ-null დადასტურების ოპერატორი (!!): გარდაქმნის nullable ტიპს არ-nullable-ად. უნდა გამოიყენოს ყურადღებით, რადგან თუ მნიშვნელობა 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 შეიძლება მიენიჭოს ნებისმიერ ტიპს უშუალოდ და აშკარად არაა მითითებული.