O que significa "passagem por cópia" no contexto da programação?
sobes.tech IA
Resposta da IA
"Passagem por cópia" (pass-by-value) significa que, ao chamar uma função ou método, é passada uma cópia do valor da variável, e não a variável em si. Quaisquer alterações feitas nesse argumento dentro da função/método não afetam a variável original.
No Swift, estruturas (structs), enumerações (enums) e tuplas (tuples) são tipos de valor (value types) e, por padrão, são passados por cópia. Classes (classes), closures e funções são tipos de referência (reference types) e são passados por referência.
Exemplo de passagem por cópia em Swift:
struct MyStruct {
var value: Int
}
func modifyStruct(s: MyStruct) {
var mutableS = s // Uma cópia de s é criada
mutableS.value = 20
print("Dentro de modifyStruct: \(mutableS.value)") // 20
}
var originalStruct = MyStruct(value: 10)
print("Antes de modifyStruct: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("Depois de modifyStruct: \(originalStruct.value)") // 10 (a estrutura original não mudou)
Neste exemplo, a função modifyStruct recebe uma cópia de originalStruct. Alterar mutableS.value dentro da função não afeta originalStruct.value.
Exemplo de passagem por referência para comparação (usando classe):
class MyClass {
var value: Int = 0
}
func modifyClass(c: MyClass) {
c.value = 20
print("Dentro de modifyClass: \(c.value)") // 20
}
var originalClass = MyClass()
originalClass.value = 10
print("Antes de modifyClass: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("Depois de modifyClass: \(originalClass.value)") // 20 (o objeto original foi alterado)
Aqui, a função modifyClass recebe uma referência ao objeto originalClass. Alterar c.value através dessa referência altera o objeto original.