Junior — Middle
Jaké jsou rozdíly mezi hodnotovými a referenčními typy v programování?
sobes.tech AI
Odpověď od AI
Typy hodnot (value types) a referenční typy (reference types) se liší způsobem, jakým ukládají a předávají data.
-
Typy hodnot jsou uloženy přímo v paměti proměnné. Při přiřazení nebo předání se kopíruje samotná hodnota. Změny kopie neovlivní originál. Ve Swiftu patří mezi typy hodnot struktury (struct), výčty (enum) a n-tice.
-
Referenční typy jsou uloženy na haldě a proměnná obsahuje odkaz na objekt. Při přiřazení se kopíruje pouze odkaz, nikoliv objekt. Změny přes odkaz se odrážejí ve všech odkazech. Ve Swiftu jsou to třídy (class).
Příklad:
struct Point {
var x: Int
var y: Int
}
class Person {
var jméno: String
init(jméno: String) { self.jméno = jméno }
}
var p1 = Point(x: 1, y: 2)
var p2 = p1
p2.x = 10
print(p1.x) // 1 — kopie se nezměnila
var osoba1 = Person(jméno: "Alice")
var osoba2 = osoba1
osoba2.jméno = "Bob"
print(osoba1.jméno) // Bob — obě proměnné odkazují na stejný objekt