Sobes.tech
Junior

İstinad növləri və dəyər növləri arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Dəyər Növləri (Value Types) təyin edilərkən və ya funksiyaya ötürülərkən kopyalanır. Hər bir nümunənin öz məlumat nüsxəsi var.

İstinad Növləri (Reference Types) təyin edilərkən və ya funksiyaya ötürülərkən, eyni məlumat nümunəsinə istinad göndərilir. Bir istinad vasitəsilə məlumatlarda edilən dəyişikliklər həmin nümunəyə aid bütün digər istinadlara əks olunacaq.

Xüsusiyyət Dəyər Növü (Value Type) İstinad Növü (Reference Type)
Təyin və ya ötürülmə zamanı davranış Kopyalama İstinadın ötürülməsi
Yaddaşda yerləşmə Yığın (Heap) Yığın (Stack)
Yaddaş idarəetməsi Avtomatik (stack vasitəsilə) Avtomatik (ARC)
Swift-də nümunələr struct, enum, tuple class, func, closure
// Dəyər Növü nümunəsi (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2, p1-in nüsxəsini alır
p2.x = 10   // p2-də edilən dəyişiklik, p1-ə təsir etmir
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// İstinad Növü nümunəsi (Sinif)
class Coordinate {
    var x: Int
    var y: Int
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2, c1 ilə eyni obyektə istinad edir
c2.x = 10   // c2-də edilən dəyişiklik, c1-ə təsir edir, çünki hər ikisi eyni obyektə istinad edir
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10