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