Sobes.tech
Middle

Kādi ir atšķirības starp vērtības tipu un atsauces tipu programmēšanas valodās?

sobes.tech AI

Atbilde no AI

Vērtību tipi (piemēram, struct, enum, galvenie skaitliskie tipi) glabā savu vērtību tieši. Piešķirot vai nododot funkcijai, tiek izveidota vērtības kopija.
Saistītie tipi (piemēram, class, function, closure) glabā atsauci uz atmiņas vietu, kur atrodas pati vērtība. Piešķirot vai nododot, tiek izveidota atsauces kopija, kas norāda uz to pašu vērtības vietu atmiņā.

Galvenās atšķirības:

Raksturlielums Vērtības tips Saistītais tips
Glabāšanas veids Vērtība glabājas tieši mainīgajā Mainīgais glabā atsauci uz vērtību
Piešķiršana Tiek kopēta vērtība Tiek kopēta atsauce (norāda uz vienu objektu)
Izmaiņas Izmaiņas kopijā neietekmē oriģinālu Izmaiņas atsaucē ietekmē oriģinālu
Atmiņas vieta Parasti steks (lokālajiem mainīgajiem) Parasti kaudze
Atmiņas pārvaldība Automātiska (iznākot no redzes loka) ARC (automātiska atsauču pārvaldība)

Piemērs Swift:

// vērtības tips
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // kopē vērtību
point2.x = 10

print(point1.x) // izvadīs 1
print(point2.x) // izvadīs 10

// saistīts tips
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 // tiek izveidota atsauce
point4.x = 10

print(point3.x) // izvadīs 10 (izmainījās objekts pēc atsauces)
print(point4.x) // izvadīs 10