Ce înseamnă "transferul prin copie" în contextul programării?
sobes.tech AI
Răspuns de la AI
"Transmiterea prin copie" (pass-by-value) înseamnă că, la apelarea unei funcții sau metode, se transmite o copie a valorii variabilei, nu variabila în sine. Orice modificare făcută în acest argument în interiorul funcției/metodei nu afectează variabila originală.
În Swift, structurile (structs), enumerările (enums) și tuple-urile (tuples) sunt tipuri de valoare (value types) și, implicit, sunt transmise prin copie. Clasele (classes), closures și funcțiile sunt tipuri de referință (reference types) și sunt transmise prin referință.
Exemplu de transmitere prin copie în Swift:
struct MyStruct {
var value: Int
}
func modifyStruct(s: MyStruct) {
var mutableS = s // Se creează o copie a lui s
mutableS.value = 20
print("În interiorul modifyStruct: \(mutableS.value)") // 20
}
var originalStruct = MyStruct(value: 10)
print("Înainte de modifyStruct: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("După modifyStruct: \(originalStruct.value)") // 10 (structura originală nu s-a schimbat)
În acest exemplu, funcția modifyStruct primește o copie a lui originalStruct. Modificarea lui mutableS.value în interiorul funcției nu afectează originalStruct.value.
Exemplu de transmitere prin referință (cu clasă):
class MyClass {
var value: Int = 0
}
func modifyClass(c: MyClass) {
c.value = 20
print("În interiorul modifyClass: \(c.value)") // 20
}
var originalClass = MyClass()
originalClass.value = 10
print("Înainte de modifyClass: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("După modifyClass: \(originalClass.value)") // 20 (obiectul original a fost modificat)
Aici, funcția modifyClass primește o referință la obiectul originalClass. Modificarea lui c.value prin această referință modifică obiectul original.