Cosa significa "trasferimento per copia" nel contesto della programmazione?
sobes.tech AI
Risposta dell'AI
"Passaggio per valore" (pass-by-value) significa che, quando si chiama una funzione o un metodo, viene passata una copia del valore della variabile, e non la variabile stessa. Qualsiasi modifica apportata a questo argomento all'interno della funzione/metodo non influisce sulla variabile originale.
In Swift, le strutture (structs), le enumerazioni (enums) e le tuple (tuples) sono tipi di valore (value types) e vengono, per impostazione predefinita, passate per copia. Le classi (classes), le closure e le funzioni sono tipi di riferimento (reference types) e vengono passate per riferimento.
Esempio di passaggio per copia in Swift:
struct MyStruct {
var value: Int
}
func modifyStruct(s: MyStruct) {
var mutableS = s // Viene creata una copia di s
mutableS.value = 20
print("Dentro modifyStruct: \(mutableS.value)") // 20
}
var originalStruct = MyStruct(value: 10)
print("Prima di modifyStruct: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("Dopo modifyStruct: \(originalStruct.value)") // 10 (la struttura originale non è cambiata)
In questo esempio, la funzione modifyStruct riceve una copia di originalStruct. La modifica di mutableS.value all'interno della funzione non influisce su originalStruct.value.
Esempio di passaggio per riferimento (con classe):
class MyClass {
var value: Int = 0
}
func modifyClass(c: MyClass) {
c.value = 20
print("Dentro modifyClass: \(c.value)") // 20
}
var originalClass = MyClass()
originalClass.value = 10
print("Prima di modifyClass: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("Dopo modifyClass: \(originalClass.value)") // 20 (l'oggetto originale è stato modificato)
Qui, la funzione modifyClass riceve un riferimento all'oggetto originalClass. Modificare c.value tramite questa referenza modifica l'oggetto originale.