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