Sobes.tech
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 — երկու փոփոխականներն էլ հղում են նույն օբյեկտին