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ą