Junior — Middle
Aké sú rozdiely medzi hodnotovými a referenčnými typmi v programovaní?
sobes.tech AI
Odpoveď od AI
Typy hodnôt (value types) a referenčné typy (reference types) sa líšia spôsobom, akým ukladajú a prenášajú údaje.
-
Typy hodnôt sa ukladajú priamo v pamäti premennej. Pri priraďovaní alebo odovzdávaní sa kopíruje samotná hodnota. Zmeny v kópii neovplyvňujú originál. V Swift patria medzi typy hodnôt štruktúry (struct), enumy (enum) a tuple.
-
Referenčné typy sa ukladajú na halde a premennej obsahuje odkaz na objekt. Pri priraďovaní sa kopíruje iba odkaz, nie objekt. Zmeny cez jeden odkaz sa prejavia vo všetkých odkazoch. V Swift sú to triedy (class).
Príklad:
struct Point {
var x: Int
var y: Int
}
class Person {
var name: String
init(name: String) { self.name = name }
}
var p1 = Point(x: 1, y: 2)
var p2 = p1
p2.x = 10
print(p1.x) // 1 — kópia sa nezmenila
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob — obe premenné odkazujú na ten istý objekt