SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
16.11.2024

Lição: 41: Tipos de Valor vs Tipos de Referência em Swift

Em Swift, entender a diferença entre tipos de valor e tipos de referência é fundamental para dominar a linguagem. Esta aula explorará ambos os conceitos, destacará suas diferenças e fornecerá exemplos de como se comportam no código.

Tipos de Valor

Os tipos de valor são tipos cujas instâncias possuem suas próprias cópias únicas de dados. Quando você atribui um tipo de valor a uma variável ou constante, ou quando o passa para uma função, você está trabalhando com uma cópia desse valor.

Tipos de Valor Comuns em Swift

  • Estruturas (struct)
  • Enumerações (enum)
  • Tuplas

Exemplo: Tipos de Valor

Vamos demonstrar como os tipos de valor funcionam com uma estrutura.

struct Ponto {
    var x: Int
    var y: Int
}

var pontoA = Ponto(x: 1, y: 2)
var pontoB = pontoA // pontoB é uma cópia de pontoA

pontoB.x = 3 // Modificar pontoB não afeta pontoA

print("Ponto A: (\(pontoA.x), \(pontoA.y))") // Saída: Ponto A: (1, 2)
print("Ponto B: (\(pontoB.x), \(pontoB.y))") // Saída: Ponto B: (3, 2)

Neste exemplo, pontoB é criado como uma cópia de pontoA. Alterar pontoB não afeta pontoA, demonstrando o comportamento dos tipos de valor.

Tipos de Referência

Por outro lado, os tipos de referência são tipos cujas instâncias compartilham uma única cópia dos dados. Quando você atribui um tipo de referência a uma variável ou constante, ou quando o passa para uma função, você está passando uma referência para a mesma instância, e não uma cópia.

Tipos de Referência Comuns em Swift

  • Classes
  • Funções (como cidadãos de primeira classe)

Exemplo: Tipos de Referência

Agora, vamos ver como os tipos de referência se comportam usando uma classe.

class Circulo {
    var raio: Double

    init(raio: Double) {
        self.raio = raio
    }
}

let circuloA = Circulo(raio: 5.0)
let circuloB = circuloA // circuloB referencia a mesma instância que circuloA

circuloB.raio = 10.0 // Modificar circuloB afeta circuloA

print("Raio do Círculo A: \(circuloA.raio)") // Saída: Raio do Círculo A: 10.0
print("Raio do Círculo B: \(circuloB.raio)") // Saída: Raio do Círculo B: 10.0

Neste exemplo, circuloB é uma referência à mesma instância de Circulo que circuloA. Quando alteramos circuloB.raio, isso também muda circuloA.raio, demonstrando o comportamento dos tipos de referência.

Resumo das Diferenças

Aqui está uma visão rápida das diferenças entre tipos de valor e tipos de referência:

Característica Tipos de Valor Tipos de Referência
Alocação de Memória Alocados na pilha Alocados no heap
Comportamento de Cópia Cada cópia tem seus próprios dados Cópias referenciam os mesmos dados
Tipos de Exemplo Estruturas, Enumeradores, Tuplas Classes

Conclusão

Entender os tipos de valor e os tipos de referência é essencial para uma programação eficaz em Swift. Escolher o tipo certo com base nas exigências da sua aplicação pode resultar em melhor desempenho e código mais claro. Lembre-se de considerar como os dados são compartilhados e copiados ao projetar suas aplicações em Swift.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!