Middle
Ինչպիսի՞ տարբերություններ կան արժեքի տիպի և հղման տիպի միջև ծրագրավորման լեզուներում։
sobes.tech AI
Պատասխան AI-ից
Արժեքի տեսակները (օրինակ, struct, enum, հիմնական թվային տեսակներ) պահում են իրենց արժեքը ուղղակիորեն։ Երբ նշանակվում կամ փոխանցվում է ֆունկցիային, ստեղծվում է արժեքի պատճենը։
Հղման տեսակները (օրինակ, class, function, closure) պահում են հղում այն վայրին, որտեղ գտնվում է արժեքը։ Երբ նշանակվում կամ փոխանցվում է, ստեղծվում է հղման պատճենը, որը ցույց է տալիս նույն արժեքին հիշողության մեջ։
Հիմնական տարբերությունները՝
| Գծագիր | Արժեքի տեսակ | Հղման տեսակ |
|---|---|---|
| Պահպանման ձևը | Արժեքը ուղղակիորեն պահվում է փոփոխականում | Փոփոխականը պահում է հղում արժեքին |
| Հատկացում | Արժեքը պատճենվում է | Հղումը պատճենվում է (պատկանում է նույն օբյեկտին) |
| Փոփոխություն | Պատճենի փոփոխությունը չի ազդում սկզբնաղբյուրի վրա | Հղման միջոցով փոփոխությունը ազդում է սկզբնաղբյուրի վրա |
| Հիշողության տեղը | Սովորաբար ստեկում (տեղական փոփոխականների համար) | Սովորաբար heap-ում |
| Հիշողության կառավարում | Ավտոմատ (scope-ից դուրս գալու ժամանակ) | 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