Wat betekent "overdracht per kopie" in de context van programmeren?
sobes.tech AI
Antwoord van AI
"Pass-by-value" betekent dat bij het aanroepen van een functie of methode, een kopie van de waarde van de variabele wordt doorgegeven, niet de variabele zelf. Elke wijziging die binnen deze argumenten wordt aangebracht in de functie/methode, heeft geen invloed op de oorspronkelijke variabele.
In Swift zijn structs, enums en tuples waardetypes (value types) en worden standaard per kopie doorgegeven. Klassen, closures en functies zijn referentietypes (reference types) en worden per referentie doorgegeven.
Voorbeeld van pass-by-value in Swift:
struct MyStruct {
var value: Int
}
func modifyStruct(s: MyStruct) {
var mutableS = s // Een kopie van s wordt gemaakt
mutableS.value = 20
print("Binnen modifyStruct: \(mutableS.value)") // 20
}
var originalStruct = MyStruct(value: 10)
print("Voor modifyStruct: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("Na modifyStruct: \(originalStruct.value)") // 10 (de originele structuur is niet veranderd)
In dit voorbeeld ontvangt de functie modifyStruct een kopie van originalStruct. Het wijzigen van mutableS.value binnen de functie heeft geen invloed op originalStruct.value.
Voorbeeld van pass-by-reference (met klasse):
class MyClass {
var value: Int = 0
}
func modifyClass(c: MyClass) {
c.value = 20
print("Binnen modifyClass: \(c.value)") // 20
}
var originalClass = MyClass()
originalClass.value = 10
print("Voor modifyClass: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("Na modifyClass: \(originalClass.value)") // 20 (het originele object is gewijzigd)
Hier ontvangt de functie modifyClass een referentie naar het object originalClass. Het wijzigen van c.value via deze referentie wijzigt het originele object.