Sobes.tech
Junior — Middle

Quali sono le differenze tra tipi di valore e tipi di riferimento nella programmazione?

sobes.tech AI

Risposta dell'AI

I tipi di valore (value types) e i tipi di riferimento (reference types) differiscono nel modo in cui memorizzano e trasmettono i dati.

  • I tipi di valore vengono memorizzati direttamente nella memoria della variabile. Quando si assegna o si passa, viene copio il valore stesso. Le modifiche alla copia non influenzano l'originale. In Swift, i tipi di valore includono strutture (struct), enumerazioni (enum) e tuple.

  • I tipi di riferimento vengono memorizzati nell'heap, e la variabile contiene un riferimento all'oggetto. Quando si assegna, viene copiata solo la referenza, non l'oggetto. Le modifiche tramite una referenza si riflettono su tutte le referenze. In Swift, sono le classi (class).

Esempio:

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 — la copia non è cambiata

var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob — entrambe le variabili fanno riferimento allo stesso oggetto