Sobes.tech
Junior

გთხოვთ, ახსნათ, რა არის null safety Kotlin ენისთვის.

sobes.tech AI

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

Null safety — ეს Kotlin-ის ენის ფუნქციაა, რომელიც თავიდან აცილებს null მითითებულ შეცდომებს. იგი აღწევს ორი ტიპის მითითების შექმნით: nullable (რომელიც საშუალებას აძლევს null-ს) და non-nullable (რომელიც არ აძლევს null-ს).

Non-nullable ტიპები გამოაცხადება ჩვეულებრივად:

var nonNullableString: String = "Hello" // არ შეიძლება იყოს null

Nullable ტიპები გამოაცხადება ? სიმბოლოს გამოყენებით, ტიპის სახელის შემდეგ:

var nullableString: String? = "Hello" // შეიძლება იყოს null
nullableString = null

Kotlin-ი მოითხოვს nullable ტიპების მკაფიო დამუშავებას, თავიდან აცილებს პირდაპირ მიმართვას მათ წევრებზე წინასწარი null-ის შემოწმების გარეშე. ამისთვის განკუთვნილია შემდეგი მექანიზმები:

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

    val length = nullableString?.length // length იქნება Int? ან null
    
  2. ელვისი ოპერატორი (?:): უზრუნველყოფს მნიშვნელობას, თუ გამოხატულება მარცხნივ არის null:

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength იქნება Int, 0 თუ nullableString null
    
  3. !!-ის არა- null დადასტურების ოპერატორი: გარდაქმნის nullable ტიპს non-nullable-ად. თუ მნიშვნელობა null-ია, ის ნაგულისხმევად გამოიწვევს NullPointerException-ს. გამოიყენება, როდესაც დეველოპერი დარწმუნებულია, რომ მნიშვნელობა არ არის null:

    val sureLength = nullableString!!.length // გამოიწვევს NullPointerException თუ nullableString null-ია
    
  4. if-შესწორებები: ტრადიციული null-ის შემოწმება if-ით. სმარტ კასტინგი (ჭკვიანი გადატანა) ხდება null-ის შემოწმების შემდეგ, თუ შემოწმება წარმატებულია:

    if (nullableString != null) {
        val length = nullableString.length // აქ nullableString ითვლება როგორც String
    }
    

ეს მექანიზმები საშუალებას აძლევს მკაფიოად მართოს სიტუაციები, როდესაც ცვლადი შეიძლება იყოს null, რაც მნიშვნელოვნად ამცირებს NullPointerException-ის წარმოქმნის ალბათობას პროგრამის შესრულების დროს.