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