Middle
Quais são as diferenças entre tipos de valor e tipos de referência nas linguagens de programação?
sobes.tech IA
Resposta da IA
Os tipos de valor (por exemplo, struct, enum, tipos numéricos básicos) armazenam seu valor diretamente. Ao atribuir ou passar para uma função, uma cópia do valor é criada.
Os tipos de referência (por exemplo, class, function, closure) armazenam uma referência ao local na memória onde o valor em si está. Ao atribuir ou passar, uma cópia da referência é criada, apontando para o mesmo valor na memória.
As principais diferenças:
| Característica | Tipo de Valor | Tipo de Referência |
|---|---|---|
| Forma de armazenamento | O valor é armazenado diretamente na variável | A variável armazena uma referência ao valor |
| Atribuição | O valor é copiado | A referência é copiada (aponta para o mesmo objeto) |
| Modificação | A modificação da cópia não afeta o original | A modificação por referência afeta o original |
| Local na memória | Normalmente na pilha (para variáveis locais) | Normalmente no heap |
| Gestão de memória | Automática (ao sair do escopo) | ARC (Contagem Automática de Referências) |
Exemplo em Swift:
// tipo de valor
struct PointStruct {
var x: Int
var y: Int
}
var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // cópia do valor
point2.x = 10
print(point1.x) // mostrará 1
print(point2.x) // mostrará 10
// tipo de referência
class PointClass {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var point3 = PointClass(x: 1, y: 2)
var point4 = point3 // cópia da referência
point4.x = 10
print(point3.x) // mostrará 10 (o objeto mudou por referência)
print(point4.x) // mostrará 10