Junior
Swift dasturlash tilida qiymat turlari va referens turlari o'rtasidagi farqlar nimalardan iborat?
sobes.tech AI
AIdan javob
Qiymat turlari (Value Types) va referens turlari (Reference Types) ma'lumotlarni saqlash va uzatish usuli bo'yicha farq qiladi.
Qiymat turlari:
- Ta'rif qilish joyida yoki stekda (mahalliy o'zgaruvchilar uchun) ma'lumotlar mustaqil nusxasini yaratadi.
- Tuzilmalar, enumlar va tuple'lar qiymat turlaridir.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 0, y: 0)
var p2 = p1 // p1 ning nusxasi yaratiladi
p2.x = 10
print(p1.x) // 0
print(p2.x) // 10 - p1 o'zgarmadi
Referens turlari:
- Ta'rif qilish joyida yoki stekda (mahalliy o'zgaruvchilar uchun) ma'lumotlar uchun yangi havola yaratadi.
- Ma'lumotlar heapda saqlanadi, va ularga havola ta'rif qilish joyida yoki stekda bo'ladi.
- Sinflar referens turlaridir.
class Rect {
var width: Int
var height: Int
init(width: Int, height: Int) {
self.width = width
self.height = height
}
}
var r1 = Rect(width: 10, height: 20)
var r2 = r1 // r2 endi r1 bilan bir xil ob'ektga havola qiladi
r2.width = 30
print(r1.width) // 30 - r1 o'zgardi, chunki r2 bir xil ob'ektga havola qiladi
print(r2.width) // 30
Asosiy farqlar jadvalda:
| Xususiyat | Qiymat turlari (Value Types) | Referens turlari (Reference Types) |
|---|---|---|
| Ta'rif qilish | Ma'lumotlarni nusxalash | Havolani nusxalash |
| Ma'lumotlarni saqlash | Ta'rif qilish joyida / Stekda | Heapda (ta'rif qilish joyida havola) |
| Ip xavfsizligi | Standart sifatida iplar uchun xavfsiz | Sinxronizatsiya talab qiladi |
| Turlar | Struct, Enum, Tuple, Array, Dict | Class, Function, Closure |
Turlar orasidagi tanlov vazifaga bog'liq: oddiy va mustaqil ma'lumotlarni ifodalash uchun Qiymat turlari afzal, umumiy o'zgartiriladigan ob'ektlar va meros olish uchun - Referens turlari (sinflar). Qiymat turlaridan foydalanish, heap ustidagi yukni kamaytirish va xotira boshqaruvini soddalashtirish orqali ishlashni yaxshilashi mumkin.