Sobes.tech
Junior

Ի՞նչ է տարբերությունը հղման տեսակների և արժեքի տեսակների միջև։

sobes.tech AI

Պատասխան AI-ից

Հղումը պահում է հիշողության մեջ հասցե, որը ցույց է տալիս այնտեղ պահվող տվյալներին: Իրականում, հղում պահող փոփոխականը միայն այդ հասցեն ունի, ոչ թե տվյալները: Հղման տիպը փոփոխականին վերագրելիս, այն պատճենում է հղումը, ոչ թե տվյալները: Տվյալների փոփոխությունները, որոնց հղումը ցույց է տալիս, արտացոլվում են բոլոր փոփոխականներում, որոնք պահում են այդ հղումը:

Արժեքի տիպը անմիջապես պահում է տվյալները: Արժեքի տիպը փոփոխականին վերագրելիս, այն պատճենում է տվյալները: Արժեքի տիպով փոփոխականում կատարված փոփոխությունները չեն ազդում մյուս փոփոխականների վրա, որոնք ստացել են այդ պատճենը:

Գծանշում Հղման տիպ Արժեքի տիպ
Պահպանում Տվյալների հղում Ինքն տվյալները
Վերագրում Հղման պատճեն Տվյալների պատճեն
Փոփոխություն Կազդում է բոլոր հղումներին Չազդում է պատճեններին
Տեղադրում Heap-ում Stack-ում
Մաքառում ARC / աղբամատ հավաքող Ավտոմատ, երբ դուրս է գալիս տեսանելիությունից
Swift օրինակներ class, closure struct, enum, tuple, հիմնական տիպեր (Int, Bool, String և այլն)
// Հղման տիպի օրինակ (դաս)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Հղումը պատճենվում է
ref2.value = 20 // Տվյալները, որոնց վրա ցույց են տալիս ref1 և ref2, փոխվում են
print(ref1.value) // Ելք՝ 20
print(ref2.value) // Ելք՝ 20

// Արժեքի տիպի օրինակ (ստրուկտ)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Տվյալները պատճենվում են
val2.value = 20 // Միայն val2-ի տվյալները փոխվում են
print(val1.value) // Ելք՝ 10
print(val2.value) // Ելք՝ 20