Sobes.tech
Junior

Swift kolleksiyaları ilə digər proqramlaşdırma dillərinin kolleksiyaları arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Swift kolleksiyalarının (Array, Dictionary, Set) digər dillərdəki (məsələn, Java, C#, Objective-C) kolleksiyalardan əsas fərqləri aşağıdakılardır:

  1. Tip təhlükəsizliyi və tip çıxarışı: Swift kolleksiyaları öz mahiyyətinə görə tip təhlükəsizdir. Elementin tipi onun ilkin yaradılması və ya ilk elementin əlavə olunması zamanı müəyyən edilir. Compile-time yoxlaması icra zamanı tip səhvlərinin qarşısını alır.

    var numbers: [Int] = [1, 2, 3] // Aydın tip təyinatı
    var strings = ["a", "b", "c"] // Tip çıxarışı
    // numbers.append("hello") // Compile səhvi: 'String' tipində dəyər 'Int' gözlənilən arqumentə çevrilə bilməz
    

    Daha az sərt tip sisteminə malik dillərdə (məsələn, Objective-C, anotasiya olmadan) elementlərin tipi @id ola bilər, bu da icra zamanı tip yoxlamalarını tələb edir.

  2. Dəyər Növləri (Structlar): Array, DictionarySet Swift-də strukturlardır (dəyər növləri), siniflər (referans növləri) deyil. Kopyalama və ya funksiyaya ötürülmə zamanı kolleksiya kopyalanır.

    var arrayA = [1, 2, 3]
    var arrayB = arrayA // Kolleksiyanın kopyası
    arrayB.append(4)
    
    print(arrayA) // Nəticə: [1, 2, 3]
    print(arrayB) // Nəticə: [1, 2, 3, 4]
    

    Əksər digər dillərdə kolleksiyalar siniflərdir və təyin olunma zamanı eyni kolleksiya üçün referans yaradılır. Bu yaddaş idarəetməsi və davranışın proqnozlaşdırılması üçün vacib fərqdir. Swift strukturlar üçün "copy-on-write" optimizasiyasını istifadə edir, bu da kolleksiya dəyişmədiyi halda kopyalamağı səmərəli edir.

  3. Seçimli elementlər: Swift kolleksiyaları seçimli tipləri ehtiva edə bilər, bu da elementin mövcud olmama ehtimalını açıq göstərir.

    var optionalNumbers: [Int?] = [1, nil, 3]
    

    Bu, nil (və ya ekvivalent) dəyərinin referans tipli kolleksiya elementinə təyin oluna bilməsi ilə fərqlənir, burada seçimlilik açıq göstərilməyib.

  4. Güclü funksional metodlar: Swift kolleksiyalar üçün map, filter, reduce, forEach, compactMap və digər funksional metodlar zəngin dəstək təqdim edir.

    let numbers = [1, 2, 3, 4, 5]
    let doubled = numbers.map { $0 * 2 } // [2, 4, 6, 8, 10]
    let even = numbers.filter { $0 % 2 == 0 } // [2, 4]
    let sum = numbers.reduce(0, +) // 15
    

    Bu imkanlar çox dillərdə də mövcuddur, lakin Swift-də daha inteqrasiya olunmuş və standart kitabxananın bir hissəsidir.

  5. Protokollar və Genişləndirmələr: Swift kolleksiyaları Collection, Sequence, MutableCollection, RandomAccessCollection və s. kimi protokollara uyğundur, bu da ümumi funksiyalar və genişləndirmələr yaratmağa imkan verir.

    extension Collection {
        func printElements() {
            for element in self {
                print(element)
            }
        }
    }
    
    let myArray = [10, 20, 30]
    myArray.printElements() // Array üçün işləyir
    
    let mySet: Set = [1, 2, 3]
    mySet.printElements() // Set üçün işləyir
    

    Bu protokol əsaslı yanaşma bəzi digər dillərdə istifadə olunan sinif hierarxiyalarından daha elastikdir.

  6. İndeksləmə və Əlçatanlıq: Swift-də indeksləmə təhlükəsizdir. Yanlış indeksə giriş zamanı vaxtında səhv baş verir (range out of bounds).

    Objective-C-də də NSArray, NSDictionary, NSSet kimi kolleksiyalar olsa da, bunlar NSObject əsasında siniflərdir, standart olaraq tip təhlükəsiz deyil (Generic-in yaranmasından əvvəl) və dəyər növləri deyildir. Swift kolleksiyaları daha müasir, təhlükəsiz və performanslı yanaşma təklif edir.