Sobes.tech
Middle

Kokie yra skirtumai tarp vertės tipo ir nuorodos tipo programavimo kalbose?

sobes.tech AI

Atsakymas iš AI

Vertės tipai (pavyzdžiui, struct, enum, pagrindiniai skaitmeniniai tipai) saugo savo reikšmę tiesiogiai. Priskiriant arba perduodant funkcijai, sukuriama reikšmės kopija.
Nuorodų tipai (pavyzdžiui, class, function, closure) saugo nuorodą į atminties vietą, kur yra pati reikšmė. Priskiriant arba perduodant, sukuriama nuorodos kopija, nurodanti į tą patį reikšmės vietą atmintyje.

Pagrindiniai skirtumai:

Savybė Vertės tipas Nuorodų tipas
Saugojimo būdas Reikšmė saugoma tiesiogiai kintamajame Kintamasis saugo nuorodą į reikšmę
Priskyrimas Kopijuojama reikšmė Kopijuojama nuoroda (nurodo į tą patį objektą)
Keitimas Keitimas kopijoje neįtakoja originalo Keitimas nuorodoje veikia originalą
Atminties vieta Paprastai, stekas (vietiniams kintamiesiems) Paprastai, krūva
Atminties valdymas Automatinis (išėjus iš matymo srities) ARC (Automatinis nuorodų valdymas)

Pavyzdys Swift kalba:

// vertės tipas
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // kopijuojama reikšmė
point2.x = 10

print(point1.x) // išves 1
print(point2.x) // išves 10

// nuorodų tipas
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 // sukuriama nuoroda
point4.x = 10

print(point3.x) // išves 10 (reikšmė pasikeitė per nuorodą)
print(point4.x) // išves 10