Sobes.tech
Junior

რა მოხდება, თუ Kotlin-ში nullable ობიექტის ველს მივმართავთ?

sobes.tech AI

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

თუ მიუვალ ობიექტის nullable ველს null-ის შემოწმების გარეშე მიიწვდებით, მოხდება NullPointerException (NPE).

უსაფრთხო წვდომისთვის შეგიძლიათ გამოიყენოთ შემდეგი მიდგომები:

  1. უსაფრთხო ზარის ოპერატორი (?.): აბრუნებს null, თუ ობიექტი null არის, წინააღმდეგ შემთხვევაში ახორციელებს ზარს.

    // დავუშვათ, user? არის User?
    val userName: String? = user?.name
    
  2. !! არა-null დადასტურების ოპერატორი: მკაფიოდ ადასტურებს, რომ ობიექტი არ არის 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` არის არა-null `User`
        val userName = it.name
    }
    

მოდელის არჩევა დამოკიდებულია პროგრამის ლოგიკაზე და იმ ქცევაზე, რომელიც გსურთ, თუ ობიექტი null-ია. ზოგადად, რეკომენდირებულია გამოიყენოთ უსაფრთხო ზარის ოპერატორი (?.) ან ელვის ოპერატორი (?:) NPE-ის თავიდან ასაცილებლად. !! ოპერატორი უნდა გამოიყენოს ფრთხილად.