Sobes.tech
Junior — Middle

Kādi ir atšķirības starp vērtību tipiem un atsauces tipiem programmēšanā?

sobes.tech AI

Atbilde no AI

Vērtību tipi (value types) un atsauces tipi (reference types) atšķiras datu glabāšanas un nodošanas veidā.

  • Vērtību tipi tiek glabāti tieši mainīgā atmiņā. Piešķirot vai pārsūtot, kopēta tiek pati vērtība. Izmaiņas kopijā neietekmē oriģinālu. Swift valodā vērtību tipi ietver struktūras (struct), enumus (enum) un tuple.

  • Atsauces tipi tiek glabāti kaudzē, un mainīgais satur atsauci uz objektu. Piešķirot, tiek kopēta tikai atsauce, ne objekts. Izmaiņas caur vienu atsauci atspoguļojas visās atsaucēs. Swift valodā tie ir klases (class).

Piemērs:

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 nav mainījusies

var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob — abas atsauces norāda uz to pašu objektu