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