Sobes.tech
Intern

Que signifie "transfert par copie" dans le contexte de la programmation?

sobes.tech IA

Réponse de l'IA

"Passage par copie" (pass-by-value) signifie que lors de l'appel d'une fonction ou d'une méthode, une copie de la valeur de la variable est transmise, et non la variable elle-même. Toute modification apportée à cet argument à l'intérieur de la fonction/méthode n'affecte pas la variable d'origine.

En Swift, les structures (structs), énumérations (enums) et tuples sont des types de valeur (value types) et sont, par défaut, passés par copie. Les classes (classes), closures et fonctions sont des types de référence (reference types) et sont passés par référence.

Exemple de passage par copie en Swift :

struct MyStruct {
    var value: Int
}

func modifyStruct(s: MyStruct) {
    var mutableS = s // Une copie de s est créée
    mutableS.value = 20
    print("Dans modifyStruct : \(mutableS.value)") // 20
}

var originalStruct = MyStruct(value: 10)
print("Avant modifyStruct : \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("Après modifyStruct : \(originalStruct.value)") // 10 (la structure originale n'a pas changé)

Dans cet exemple, la fonction modifyStruct reçoit une copie de originalStruct. Modifier mutableS.value à l'intérieur de la fonction n'affecte pas originalStruct.value.

Exemple de passage par référence pour comparaison (en utilisant une classe) :

class MyClass {
    var value: Int = 0
}

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

var originalClass = MyClass()
originalClass.value = 10
print("Avant modifyClass : \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("Après modifyClass : \(originalClass.value)") // 20 (l'objet original a été modifié)

Ici, la fonction modifyClass reçoit une référence à l'objet originalClass. Modifier c.value via cette référence modifie l'objet original.