Sobes.tech
Middle

Jaké jsou rozdíly mezi hodnotovým typem a referenčním typem v programovacích jazycích?

sobes.tech AI

Odpověď od AI

Typy hodnot (například struct, enum, základní číselné typy) ukládají svou hodnotu přímo. Při přiřazení nebo předání funkci se vytvoří kopie hodnoty.
Typy odkazů (například class, function, closure) ukládají odkaz na místo v paměti, kde se nachází samotná hodnota. Při přiřazení nebo předání se vytvoří kopie odkazu, který odkazuje na stejnou hodnotu v paměti.

Hlavní rozdíly:

Charakteristika Typ hodnoty Typ odkazu
Způsob ukládání Hodnota je uložena přímo v proměnné Proměnná ukládá odkaz na hodnotu
Přiřazení Kopíruje hodnotu Kopíruje odkaz (ukazuje na stejný objekt)
Změna Změny kopie neovlivní originál Změny přes odkaz ovlivní originál
Místo v paměti Obvykle na zásobníku (pro lokální proměnné) Obvykle na haldě
Správa paměti Automatická (při opuštění rozsahu) ARC (Automatické počítání odkazů)

Příklad v Swift:

// typ hodnoty
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // kopie hodnoty
point2.x = 10

print(point1.x) // vypíše 1
print(point2.x) // vypíše 10

// typ odkazu
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 // kopie odkazu
point4.x = 10

print(point3.x) // vypíše 10 (objekt se změnil přes odkaz)
print(point4.x) // vypíše 10