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