Sobes.tech
Middle

Care sunt diferențele dintre tipurile de valoare și tipurile de referință în limbajele de programare?

sobes.tech AI

Răspuns de la AI

Tipurile de valoare (de exemplu, struct, enum, tipuri numerice de bază) stochează valoarea lor direct. La atribuirea sau transmiterea către o funcție, se creează o copie a valorii.
Tipurile de referință (de exemplu, class, function, closure) stochează o referință către locul din memorie unde se află valoarea în sine. La atribuirea sau transmiterea, se creează o copie a referinței, care indică către aceeași valoare în memorie.

Principalele diferențe:

Caracteristică Tip de Valoare Tip de Referință
Mod de stocare Valoarea este stocată direct în variabilă Variabila stochează o referință la valoare
Atribuire Se copiază valoarea Se copiază referința (indică același obiect)
Modificare Modificarea copiei nu afectează originalul Modificarea prin referință afectează originalul
Loc în memorie De obicei pe stivă (pentru variabile locale) De obicei pe heap
Gestionarea memoriei Automată (la ieșirea din scop) ARC (Contorizare Automată a Referințelor)

Exemplu în Swift:

// tip de valoare
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // se copiază valoarea
point2.x = 10

print(point1.x) // va afișa 1
print(point2.x) // va afișa 10

// tip de referință
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 // se copiază referința
point4.x = 10

print(point3.x) // va afișa 10 (obiectul s-a schimbat prin referință)
print(point4.x) // va afișa 10