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