Sobes.tech
Intern

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.