Sobes.tech
Intern

O que são tipos de dados e quais existem?

sobes.tech IA

Resposta da IA

Os tipos de dados definem o conjunto de valores possíveis e as operações que podem ser realizadas sobre eles. Em Swift, eles dividem-se em Tipos de Valor e Tipos de Referência.

Tipos de Valor:

  • Os valores são copiados ao atribuir ou passar para uma função.
  • Cada variável ou constante armazena a sua própria cópia independente dos dados.
  • As alterações numa cópia não afetam as outras.

Exemplos de Tipos de Valor:

  • Estruturas (struct)
  • Enumerações (enum)
  • Tuplos (tuple)
  • Tipos básicos: Int, Double, Bool, String, arrays (Array), dicionários (Dictionary), conjuntos (Set).
// Exemplo de Tipo de Valor: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 obtém uma cópia de p1
p2.x = 10 // Alterar p2 não afeta p1

print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

Tipos de Referência:

  • Os valores não são copiados. Ao atribuir ou passar para uma função,
  • é passada uma referência ao mesmo exemplar de dados na memória.
  • Várias variáveis ou constantes podem referir-se ao mesmo exemplar.
  • As alterações através de uma referência são visíveis em todas as outras.

Exemplos de Tipos de Referência:

  • Classes (class)
  • Funções (func)
  • Closures (closure)
// Exemplo de Tipo de Referência: class
class Circle {
    var radius: Double

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

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 refere-se ao mesmo exemplar que c1
c2.radius = 10.0 // Alterar c2 afeta c1

print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0

Tabela com os principais tipos:

Categoria Tipo(s) Tipo de Valor/Referência Descrição
Inteiros Int, UInt, Int8, UInt8, etc. Valor Números inteiros de diferentes tamanhos, com ou sem sinal
Flutuantes Float, Double Valor Números com parte fracionária
Booleanos Bool Valor Valores lógicos (true ou false)
Strings String Valor Sequência de caracteres
Coleções Array, Dictionary, Set Valor Coleções ordenadas/não ordenadas de elementos do mesmo tipo
Estruturas struct Valor Tipos compostos definidos pelo utilizador que armazenam valores relacionados
Enumerações enum Valor Definem um tipo comum para um grupo de valores relacionados
Tuplos (value1, value2, ...) Valor Agrupam vários valores num único tipo composto
Classes class Referência Tipos compostos definidos pelo utilizador que suportam herança e comportamento por referência
Funções () -> Void, (Int) -> String, etc. Referência Blocos de código executável
Closures { (parameters) -> return type in code } Referência Blocos de código autónomos que podem ser passados e utilizados
Opcionais Type? (sugar sintático para Optional<Type>) Valor Representa um valor do tipo Type ou a sua ausência (nil)

A escolha entre Tipos de Valor e Tipos de Referência depende da tarefa: Tipos de Valor são preferidos para dados pequenos e para garantir a segurança em multithreading, enquanto Tipos de Referência são adequados para objetos complexos que requerem estado partilhado e herança.