Sobes.tech
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