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 жүктөмүн азайтып жана эс тутумду башкарууну жөнөкөйлөтөт.