Middle
Millised on väärtusetüübi ja viidetüübi erinevused programmeerimiskeeltes?
sobes.tech AI
Vastus AI-lt
Väärtusetüübid (näiteks struct, enum, põhilised arvutüübid) hoiavad oma väärtust otse. Omistamisel või funktsioonile edastamisel luuakse väärtuse koopia.
Viidetüübid (näiteks class, function, closure) hoiavad viidet kohta mälus, kus asub ise väärtus. Omistamisel või edastamisel luuakse viite koopia, mis osutab samale väärtusele mälus.
Peamised erinevused:
| Omadus | Väärtusetüüp | Viidetüüp |
|---|---|---|
| Salvestusviis | Väärtus salvestatakse otse muutujasse | Muutuja hoiab viidet väärtusele |
| Omistamine | Kopeeritakse väärtus | Kopeeritakse viide (osutab ühele objektile) |
| Muutmine | Muutmine koopias ei mõjuta algset | Muutmine viite kaudu mõjutab algset |
| Mälukoht | Tavaliselt virna (lokalsete muutujate jaoks) | Tavaliselt kogumälu |
| Mäluhaldus | Automaatne (välja minnes vaateväljast) | ARC (automaatne viidete haldus) |
Näide Swiftis:
// väärtusetüüp
struct PointStruct {
var x: Int
var y: Int
}
var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // kopeeritakse väärtus
point2.x = 10
print(point1.x) // väljastab 1
print(point2.x) // väljastab 10
// viidetüüp
class PointClass {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var point3 = PointClass(x: 1, y: 2)
var point4 = point3 // luuakse viide
point4.x = 10
print(point3.x) // väljastab 10 (muutus objekti viite kaudu)
print(point4.x) // väljastab 10