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.