Sobes.tech
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.