Middle
Programlama dillerinde değer tipi ve referans tipi arasında ne farklar vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Değer tipleri (örneğin, struct, enum, temel sayısal türler) değerlerini doğrudan saklar. Bir atama veya fonksiyona geçerken, değerin bir kopyası oluşturulur.
Referans tipleri (örneğin, class, function, closure) ise, değerin kendisinin bulunduğu bellek konumuna bir referans tutar. Atama veya geçiş sırasında, aynı bellek konusuna işaret eden bir referans kopyası oluşturulur.
Ana farklar:
| Özellik | Değer Tipi | Referans Tipi |
|---|---|---|
| Saklama Yöntemi | Değer doğrudan değişkende saklanır | Değişken, değere referans tutar |
| Atama | Değer kopyalanır | Referans kopyalanır (aynı nesneye işaret eder) |
| Değişiklik | Kopya üzerinde yapılan değişiklikler orijinali etkilemez | Referans üzerindeki değişiklikler orijinali etkiler |
| Bellek Yeri | Genellikle yığında (yerel değişkenler için) | Genellikle yığında veya heap'te olur |
| Bellek Yönetimi | Otomatik (kapsam dışına çıkıldığında) | ARC (Otomatik Referans Sayımı) |
Swift'te örnek:
// değer tipi
struct PointStruct {
var x: Int
var y: Int
}
var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // değeri kopyala
point2.x = 10
print(point1.x) // 1 yazdırır
print(point2.x) // 10 yazdırır
// referans 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 // referansı kopyala
point4.x = 10
print(point3.x) // 10 (nesne referansla değişti)
print(point4.x) // 10