Sobes.tech
Middle

Swift'da massiv va tuzilmalarni nusxalash o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Swift'dagi massivlar (arrays) tuzilmalardir (struct).

Massivni nusxalashda, elementlarning yangi nusxasi yaratiladi. Bir massivdagi o'zgarishlar boshqasiga ta'sir qilmaydi.

var array1 = [1, 2, 3]
var array2 = array1 // Nusxa olinadi
array2[0] = 10
// array1 = [1, 2, 3]
// array2 = [10, 2, 3]

Swift'dagi tuzilmalar (struct) qiymat turlaridir (value types). Tuzilmani tayinlash yoki funksiyaga o'tkazishda, ma'lumotlarning yangi nusxasi yaratiladi. Bir tuzilmaning nusxasida o'zgarishlar, boshqa nusxalarni ta'sir qilmaydi.

struct Point {
    var x: Int
    var y: Int
}

var point1 = Point(x: 0, y: 0)
var point2 = point1 // Nusxa olinadi
point2.x = 10
// point1.x = 0
// point2.x = 10

Farqi shundaki, massivlar, tuzilmalardan iborat bo'lib, nusxalashda qiymat-tur xulqini ko'rsatadi va elementlarning to'liq nusxasini yaratadi. Tuzilmalar odatda ham qiymat-tur bo'lib, nusxalashda ularning xususiyatlarining yangi nusxasini yaratadi. Shuning uchun, ikkala ob'ekt uchun (massivlar va tuzilmalari) qiymat bo'yicha nusxalash semantikasidan (copy-by-value) foydalaniladi. Farqi shundaki, massiv boshqa qiymatlarni saqlovchi konteyner bo'lib, ular ham qiymat-tur, ham havola-tur bo'lishi mumkin.