Junior — Middle
Ի՞նչ տարբերություններ կան արժեքային և հղման տիպերի միջև ծրագրավորման մեջ։
sobes.tech AI
Պատասխան AI-ից
Արժեքի տեսակները (value types) և հղման տեսակները (reference types) տարբեր են տվյալների պահպանում և փոխանցման ձևով:
-
Արժեքի տեսակներ անմիջապես պահվում են փոփոխականի հիշողության մեջ: Հանձնում կամ փոխանցում կատարելիս, ինքն արժեքը պատճենվում է: Կոպի վրա կատարված փոփոխությունները չեն ազդում սկզբնավորման վրա: Swift-ում արժեքի տեսակներն են կառուցվածքները (struct), enum-ները (enum) և տիպերը (tuples):
-
Հղման տեսակները պահվում են heap-ում, և փոփոխականը պարունակում է հղում օբյեկտին: Հանձնում կամ փոխանցում կատարելիս, պատճենվում է միայն հղումը, ոչ թե օբյեկտը: Հղման միջոցով կատարված փոփոխությունները արտացոլվում են բոլոր հղումներում: Swift-ում դա դասերն են (class):
Օրինակ՝
struct Point {
var x: Int
var y: Int
}
class Person {
var name: String
init(name: String) { self.name = name }
}
var p1 = Point(x: 1, y: 2)
var p2 = p1
p2.x = 10
print(p1.x) // 1 — պատճենը չի փոխվել
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob — երկու փոփոխականներն էլ հղում են նույն օբյեկտին