Middle
Дар забонҳои барномасозӣ фарқиятҳои байни навъи арзиш ва навъи ишора чӣҳоянд?
sobes.tech AI
Ҷавоб аз AI
Қиймат турлари (масалан, struct, enum, асосий рақамли турлар) ўз қийматини тўғридан-тўғри сақлайди. Аниқлаш ёки функцияга ўтказилганда, қийматнинг нусхаси яратилади.
Ҳавола турлари (масалан, class, function, closure) эса, қийматнинг ўзи жойлашган хотира жойига ҳавола сақлайди. Аниқлаш ёки ўтказилганда, ҳаволанинг нусхаси яратилади ва хотирада шу қийматга ишора қилади.
Асосий фарқлар:
| Хусусият | Қиймат тури | Ҳавола тури |
|---|---|---|
| Сақлаш усули | Қиймат тўғридан-тўғри ўзгартирилади | Ҳавола қийматга ишора қилади |
| Аниқлаш | Қиймат нусхаланади | Ҳавола нусхаланади (бир хил объектга ишора қилади) |
| Ўзгартириш | Нусхадаги ўзгартиришлар оригиналга таъсир қилмайди | Ҳавола орқали ўзгартиришлар оригиналга таъсир қилади |
| Хотира жойи | Одатда стекда (махаллий ўзгартирувчилар учун) | Одатда кучада (heap) |
| Хотира бошқаруви | Автоматик (ҳудуддан чиқишда) | ARC (Автоматик Ҳавола Саноқчиси) |
Swiftда мисол:
// қиймат тури
struct PointStruct {
var x: Int
var y: Int
}
var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // қиймат нусхаси
point2.x = 10
print(point1.x) // 1 чиқаради
print(point2.x) // 10 чиқаради
// ҳавола тури
class PointClass {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var point3 = PointClass(x: 1, y: 2)
var point4 = point3 // ҳавола нусхаси
point4.x = 10
print(point3.x) // 10 (объект ҳавола орқали ўзгарди)
print(point4.x) // 10