Sobes.tech
Junior

Swift-də opsionalardan nə üçün istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Seçimli dəyişənə müəyyən bir növün dəyəri və ya nil (dəyər yoxluğu) saxlamaq imkanı verir. Onlar, dəyərin mövcud olmaya biləcəyi halları açıq şəkildə idarə etmək üçün istifadə olunur və digər dillərdə rast gəlinən "null pointer" (işə salınma zamanı çökmələr) səhvlərindən qaçınmağa kömək edir.

Seçimli dəyişənlərin istifadəsinin əsas üstünlükləri:

  • Təhlükəsizlik: Swift kompilyatoru nil-in açıq şəkildə işlənməsini tələb edir, bu da işə salınma zamanı səhvlərin ehtimalını azaldır.
  • Aydınlıq: Növün seçimli olması onun elanında (?) açıq şəkildə göstərilir, bu da kodu daha anlaşılan edir.

Seçimli dəyişənlərlə işləmə üsulları:

  • Məcburi açma (Forced Unwrapping): Seçimli dəyişənin ardınca ünlem işarəsi (!) istifadə olunur. Təhlükəlidir, əgər dəyər nil-dirsə, səhv baş verər.
    var optionalString: String? = "Hello"
    let unwrappedString = optionalString! // Təhlükəlidir, əgər optionalString nil-dirsə
    
  • Seçimli bağlama (Optional Binding): if let və ya guard let istifadə edilərək, dəyər təhlükəsiz şəkildə çıxarılır, əgər mövcuddursa.
    var optionalString: String? = "Hello"
    if let safeString = optionalString {
        // safeString, optionalString nil deyilsə, "Hello"-yu əhatə edir
        print(safeString)
    } else {
        // optionalString nil-dir
        print("Dəyər nil-dir")
    }
    
    func processString(_ optionalString: String?) {
        guard let safeString = optionalString else {
            // optionalString nil-dir, funksiyadan çıxırıq
            print("Dəyər nil-dir, çıxış")
            return
        }
        // safeString, "Hello"-yu əhatə edir
        print(safeString)
    }
    
  • Seçimli zəncir (Optional Chaining): Metodları təhlükəsiz şəkildə çağırmağa, xüsusiyyətlərə və ya indekslərə müraciət etməyə imkan verir. Əgər zəncirin hər hansı bir elementi nil-dirsə, bütün zəncir nil qaytarır.
    class MyClass {
        var property: String?
    }
    var myInstance: MyClass? = MyClass()
    myInstance?.property = "Value" // Əgər myInstance nil deyilsə, xüsusiyyətə dəyər təyin edir
    let retrievedValue = myInstance?.property // retrievedValue String?
    
  • Nil-ə birləşdirmə operatoru (Nil-Coalescing Operator): Əgər seçimli nil-dirsə, standart dəyər təqdim edir.
    let optionalValue: String? = nil
    let defaultValue = "Default"
    let finalValue = optionalValue ?? defaultValue // finalValue "Default" olacaq