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