Middle
Aké sú rozdiely medzi typom hodnoty a referenčným typom v programovacích jazykoch?
sobes.tech AI
Odpoveď od AI
Typy hodnôt (napríklad struct, enum, základné číselné typy) ukladajú svoju hodnotu priamo. Pri priradení alebo odovzdaní do funkcie sa vytvorí kópia hodnoty.
Typy odkazov (napríklad class, function, closure) ukladajú odkaz na miesto v pamäti, kde sa nachádza samotná hodnota. Pri priradení alebo odovzdaní sa vytvorí kópia odkazu, ktorý odkazuje na rovnakú hodnotu v pamäti.
Hlavné rozdiely:
| Charakteristika | Typ hodnoty | Typ odkazu |
|---|---|---|
| Spôsob ukladania | Hodnota je uložená priamo v premennej | Premenná ukladá odkaz na hodnotu |
| Priradenie | Kopíruje sa hodnota | Kopíruje sa odkaz (ukazuje na ten istý objekt) |
| Zmena | Zmena kópie neovplyvňuje originál | Zmena cez odkaz ovplyvňuje originál |
| Miesto v pamäti | Zvyčajne na zásobníku (pre lokálne premenne) | Zvyčajne na halde |
| Správa pamäti | Automatická (pri opustení rozsahu) | ARC (Automatické počítanie odkazov) |
Príklad v Swift:
// typ hodnoty
struct PointStruct {
var x: Int
var y: Int
}
var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // kopíruje hodnotu
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 // kopíruje odkaz
point4.x = 10
print(point3.x) // vypíše 10 (objekt sa zmenil cez odkaz)
print(point4.x) // vypíše 10