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