Sobes.tech
Intern

Was bedeutet "Kopierübertragung" im Kontext der Programmierung?

sobes.tech KI

Antwort von AI

"Übergabe durch Kopie" (pass-by-value) bedeutet, dass beim Aufruf einer Funktion oder Methode eine Kopie des Wertes der Variablen übergeben wird, nicht die Variable selbst. Änderungen, die an diesem Argument innerhalb der Funktion/Methode vorgenommen werden, beeinflussen die ursprüngliche Variable nicht.

In Swift sind Strukturen (structs), Aufzählungen (enums) und Tupel (tuples) Werttypen (value types) und werden standardmäßig durch Kopie übergeben. Klassen (classes), Closures und Funktionen sind Referenztypen (reference types) und werden per Referenz übergeben.

Beispiel für Übergabe durch Kopie in Swift:

struct MyStruct {
    var value: Int
}

func modifyStruct(s: MyStruct) {
    var mutableS = s // Es wird eine Kopie von s erstellt
    mutableS.value = 20
    print("Innerhalb von modifyStruct: \(mutableS.value)") // 20
}

var originalStruct = MyStruct(value: 10)
print("Vor modifyStruct: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("Nach modifyStruct: \(originalStruct.value)") // 10 (die ursprüngliche Struktur hat sich nicht geändert)

In diesem Beispiel erhält die Funktion modifyStruct eine Kopie von originalStruct. Das Ändern von mutableS.value innerhalb der Funktion beeinflusst originalStruct.value nicht.

Beispiel für Übergabe durch Referenz zum Vergleich (mit Klasse):

class MyClass {
    var value: Int = 0
}

func modifyClass(c: MyClass) {
    c.value = 20
    print("Innerhalb von modifyClass: \(c.value)") // 20
}

var originalClass = MyClass()
originalClass.value = 10
print("Vor modifyClass: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("Nach modifyClass: \(originalClass.value)") // 20 (das ursprüngliche Objekt wurde geändert)

Hier erhält die Funktion modifyClass eine Referenz auf das Objekt originalClass. Das Ändern von c.value über diese Referenz ändert das ursprüngliche Objekt.