Sobes.tech
Middle

Quali sono le differenze tra tipo di valore e tipo di riferimento nei linguaggi di programmazione?

sobes.tech AI

Risposta dell'AI

I tipi di valore (ad esempio, struct, enum, tipi numerici di base) memorizzano il loro valore direttamente. Quando si assegna o si passa a una funzione, viene creata una copia del valore.
I tipi di riferimento (ad esempio, class, function, closure) memorizzano un riferimento al luogo in memoria dove si trova il valore stesso. Quando si assegna o si passa, viene creata una copia del riferimento, che punta allo stesso valore in memoria.

Le principali differenze:

Caratteristica Tipo di Valore Tipo di Riferimento
Modalità di memorizzazione Il valore viene memorizzato direttamente nella variabile La variabile memorizza un riferimento al valore
Assegnazione Il valore viene copiato Il riferimento viene copiato (puntano allo stesso oggetto)
Modifica La modifica della copia non influisce sull'originale La modifica tramite riferimento influisce sull'originale
Luogo in memoria Di solito nello stack (per variabili locali) Di solito nell'heap
Gestione della memoria Automatica (quando si esce dal scope) ARC (Contatore di Riferimento Automatico)

Esempio in Swift:

// tipo di valore
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // copia il valore
point2.x = 10

print(point1.x) // mostrerà 1
print(point2.x) // mostrerà 10

// tipo di riferimento
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 // copia il riferimento
point4.x = 10

print(point3.x) // mostrerà 10 (l'oggetto è cambiato per riferimento)
print(point4.x) // mostrerà 10