Junior — Middle
Millised on erinevused väärtusetüüpide ja viidetüüpide vahel programmeerimises?
sobes.tech AI
Vastus AI-lt
Väärtusetüübid (value types) ja viidetüübid (reference types) erinevad andmete salvestamise ja edastamise viisi.
-
Väärtusetüübid salvestatakse otse muutujate mällu. Määramisel või edastamisel kopeeritakse ise väärtus. Koopia muudatused ei mõjuta algset. Swiftis kuuluvad väärtusetüüpide hulka struktuurid (struct), enumid (enum) ja tupelid (tuples).
-
Viidetüübid salvestatakse virnas (heap), ja muutujal on viide objekti juurde. Määramisel kopeeritakse ainult viide, mitte objekt. Muudatused ühe viite kaudu kajastuvad kõigis viidetes. Swiftis on need klassid (class).
Näide:
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 — koopia ei muutunud
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob — mõlemad muutujad viitavad samale objektile