Sobes.tech
Junior — Middle

Kokios yra skirtumai tarp reikšmės tipų ir nuorodų tipų programavime?

sobes.tech AI

Atsakymas iš AI

Vertės tipai (value types) ir nuorodų tipai (reference types) skiriasi duomenų saugojimo ir perdavimo būdu.

  • Vertės tipai yra saugomi tiesiogiai kintamojo atmintyje. Priskyrimo ar perdavimo metu kopijuojama pati reikšmė. Pakeitimai kopijoje neturi įtakos originalui. Swift'e vertės tipai apima struktūras (struct), išvardijimus (enum) ir porinius duomenis (tuples).

  • Nuorodų tipai saugomi krūvoje, o kintamasis turi nuorodą į objektą. Priskyrimo metu kopijuojama tik nuoroda, ne objektas. Pakeitimai per vieną nuorodą atsispindi visuose nuorodose. Swift'e tai yra klasės (class).

Pavyzdys:

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 — kopija nepasikeitė

var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob — abi nuorodos nurodo tą patį objektą