Sobes.tech
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