Sobes.tech
Junior

Ma'lumot turlari va qiymat turlari o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Qiymat turlari (Value Types) tayinlash yoki funktsiyaga o'tkazishda nusxa ko'chiriladi. Har bir nusxa o'z ma'lumotlarining o'z nusxasiga ega.

Manba turlari (Reference Types) tayinlash yoki funktsiyaga o'tkazishda, ma'lumotlarning bir xil nusxasiga havola o'tkaziladi. Bir havola orqali ma'lumotlarni o'zgartirish, bu nusxaga bog'liq bo'lgan barcha boshqa havolalarga ta'sir qiladi.

Xususiyat Qiymat turi (Value Type) Manba turi (Reference Type)
Tayinlash/uzatishdagi xulq Nusxa olish Havola uzatish
Xotira joylashuvi Stack (Heap) Heap (Stack)
Xotira boshqaruvi Avtomatik (stack orqali) Avtomatik (ARC)
Swift misollari struct, enum, tuple class, func, closure
// Qiymat turi misoli (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2, p1 ning nusxasini oladi
p2.x = 10   // P2 da o'zgarish, p1 ni ta'sir qilmaydi
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Manba turi misoli (Klass)
class Coordinate {
    var x: Int
    var y: Int
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2, c1 bilan bir xil ob'ektga havola qiladi
c2.x = 10   // c2 da o'zgarish, c1 ga ta'sir qiladi, chunki ular bir xil ob'ektga havola qilmoqda
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10