Sobes.tech
Junior

Swift программалоо тилинде маанилүү жана шилтемелүү түрлөрдүн айырмачылыктары кандай?

sobes.tech AI

AIден жооп

Мәндердин түрлөрү (Value Types) жана шилтемелүү түрлөрү (Reference Types) маалыматтарды сактоо жана өткөрүү жолдору боюнча айырмаланат:

Мәндердин түрлөрү:

  • Теңдөө өзүнчө көчүрмөнү түзөт:
  • Маалыматтар түздөн-түз жарыялоо жеринде же стекте сакталат (локалдуу өзгөрмөлөр үчүн):
  • Структуралар, тизмектер жана кортеждер — маанилердин түрлөрү:
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 0, y: 0)
var p2 = p1 // p1нин көчүрмөсү түзүлөт
p2.x = 10

print(p1.x) // 0
print(p2.x) // 10 - p1 өзгөргөн жок

Шилтемелүү түрлөр:

  • Теңдөө ошол эле маалыматка шилтемени түзөт:
  • Маалыматтар heapте сакталат, ал эми шилтеме — жарыялоо жеринде же стекте:
  • Класстар шилтемелүү түрлөр:
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 азыр ошол эле объектке шилтеме кылат
r2.width = 30

print(r1.width) // 30 - r1 өзгөрдү, анткени r2 ошол эле объектке шилтеме кылат
print(r2.width) // 30

Негизги айырмачылыктар таблицада:

Өзгөчөлүк Мәндердин түрлөрү (Value Types) Шилтемелүү түрлөр (Reference Types)
Теңдөө Маалыматтарды көчүрөт Шилтемени көчүрөт
Маалыматты сактоо Жарыялоо жеринде / стекте Heapте (шилтеме жарыялоо жеринде)
Туташтыктык Туташтыксыз, автоматтык түрдө Синхрондоштурууну талап кылат
Түрлөр Struct, Enum, Tuple, Array, Dict Class, Function, Closure

Түрлөрдүн арасындагы тандоо көйгөйгө жараша болот: жөнөкөй көзкарандысыз маалыматтарды көрсөтүү үчүн Value Types артыкчылыктуу, ал эми жалпы өзгөрүлмө объекттер жана мурас алуу үчүн — Reference Types (кластар). Value Types колдонуу иштөө жөндөмдүүлүгүн жакшырта алат, heap жүктөмүн азайтып жана эс тутумду башкарууну жөнөкөйлөтөт.