Mit jelent a "másolás szerinti átadás" a programozás kontextusában?
sobes.tech MI
Válasz az MI-től
"Másolás szerinti átadás" (pass-by-value) azt jelenti, hogy egy függvény vagy metódus hívásakor a változó értékének másolatát adjuk át, nem magát a változót. Bármilyen változtatás, amit ezen az argumentumon belül a függvényben/metódusban végzünk, nem befolyásolja az eredeti változót.
Swiftben a struktúrák (structs), az enumerációk (enums) és a tuple-ök (tuples) értéktípusok (value types), és alapértelmezés szerint másolatként kerülnek átadásra. A osztályok (classes), a lezárások (closures) és a függvények referencia típusok (reference types), és referencia szerint kerülnek átadásra.
Swift példák másolat szerinti átadásra:
struct MyStruct {
var value: Int
}
func modifyStruct(s: MyStruct) {
var mutableS = s // Másolat készül s-ről
mutableS.value = 20
print("modifyStruct belseje: \(mutableS.value)") // 20
}
var originalStruct = MyStruct(value: 10)
print("modifyStruct előtt: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("modifyStruct után: \(originalStruct.value)") // 10 (az eredeti struktúra nem változott)
Ebben a példában a modifyStruct függvény egy másolatot kap az originalStruct-ről. A mutableS.value módosítása nem befolyásolja az originalStruct.value-t.
Referencia szerinti átadás példája (osztály használatával):
class MyClass {
var value: Int = 0
}
func modifyClass(c: MyClass) {
c.value = 20
print("modifyClass belseje: \(c.value)") // 20
}
var originalClass = MyClass()
originalClass.value = 10
print("modifyClass előtt: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("modifyClass után: \(originalClass.value)") // 20 (az eredeti osztály módosult)
Itt a modifyClass függvény egy referencia az originalClass-ra. A c.value módosítása ezen a referencián keresztül módosítja az eredeti objektumot.