Sobes.tech
Middle

Dasturlash tillarida qiymat turi va murojaat turi o'rtasidagi farqlar nimalardan iborat?

sobes.tech AI

AIdan javob

Qiymat turlari (masalan, struct, enum, asosiy raqamli turlar) o'z qiymatini to'g'ridan-to'g'ri saqlaydi. Belgilash yoki funktsiyaga o'tkazishda qiymaning nusxasi yaratiladi.
Havola turlari (masalan, class, function, closure) esa, qiymatning o'zi joylashgan xotira joyiga havola saqlaydi. Belgilash yoki o'tkazishda havolaning nusxasi yaratiladi, bu esa xotirada bir xil qiymatga ishora qiladi.

Asosiy farqlar:

Xususiyat Qiymat turi Havola turi
Saqlash usuli Qiymat to'g'ridan-to'g'ri o'zgaruvchida saqlanadi O'zgaruvchi qiymatga havola saqlaydi
Belgilash Qiymat nusxalanadi Havola nusxalanadi (bir xil ob'ektga ishora qiladi)
O'zgartirish Nusxadagi o'zgartirishlar aslga ta'sir qilmaydi Havola orqali o'zgartirishlar aslga ta'sir qiladi
Xotira joyi Odatda stackda (mahalliy o'zgaruvchilar uchun) Odatda heapda
Xotira boshqaruvi Avtomatik (kapsamdan chiqishda) ARC (Avtomatik Referenslar Hisoblagichi)

Swift misoli:

// qiymat turi
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // qiymat nusxasi
point2.x = 10

print(point1.x) // 1 ni chiqaradi
print(point2.x) // 10 ni chiqaradi

// havola turi
class PointClass {
    var x: Int
    var y: Int

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var point3 = PointClass(x: 1, y: 2)
var point4 = point3 // havola nusxasi
point4.x = 10

print(point3.x) // 10 (obyekt havola orqali o'zgardi)
print(point4.x) // 10