Sobes.tech
Middle

Proqramlaşdırma dillərində dəyər tipi və istinad tipi arasında nə fərqlər var?

sobes.tech Süni İntellekt

AI-dan cavab

Dəyər növləri (məsələn, struct, enum, əsas sayısal növlər) dəyərini birbaşa saxlayır. Təyin və ya funksiyaya ötürülərkən, dəyərin nüsxəsi yaradılır.
İstinad növləri (məsələn, class, function, closure) isə, dəyərin özünün yerləşdiyi yaddaş yerinə istinad saxlayır. Təyin və ya ötürülərkən, istinadın nüsxəsi yaradılır və yaddaşdakı eyni dəyərə işarə edir.

Əsas fərqlər:

Xüsusiyyət Dəyər Növü İstinad Növü
Saxlama üsulu Dəyər birbaşa dəyişəndə saxlanılır Dəyişən dəyərə istinad saxlayır
Təyin Dəyər kopyalanır İstinad kopyalanır (eyni obyektə işarə edir)
Dəyişiklik Kopya üzərində edilən dəyişikliklər orijinalı təsir etmir İstinad vasitəsilə edilən dəyişikliklər orijinalı təsir edir
Yaddaş yeri Adətən yığımda (yerli dəyişənlər üçün) Adətən yığımda (heap)
Yaddaş idarəsi Avtomatik (sahə xaricinə çıxanda) ARC (Avtomatik İstinad Sayımı)

Swift nümunəsi:

// dəyər tipi
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // dəyərin nüsxəsi
point2.x = 10

print(point1.x) // 1 göstərəcək
print(point2.x) // 10 göstərəcək

// istinad tipi
class PointClass {
    var x: Int
    var y: Int

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var point3 = PointClass(x: 1, y: 2)
var point4 = point3 // istinadın nüsxəsi
point4.x = 10

print(point3.x) // 10 (obyekt istinad vasitəsilə dəyişdi)
print(point4.x) // 10