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