Sobes.tech
Intern

¿Qué son los tipos de datos y cuáles existen?

sobes.tech AI

Respuesta de la IA

Los tipos de datos definen el conjunto de valores posibles y las operaciones que se pueden realizar sobre ellos. En Swift, se dividen en Tipos de Valor y Tipos de Referencia.

Tipos de Valor:

  • Los valores se copian al asignar o pasar a una función.
  • Cada variable o constante almacena su propia copia independiente de los datos.
  • Los cambios en una copia no afectan a las otras.

Ejemplos de Tipos de Valor:

  • Estructuras (struct)
  • Enumeraciones (enum)
  • Tuplas (tuple)
  • Tipos básicos: Int, Double, Bool, String, arreglos (Array), diccionarios (Dictionary), conjuntos (Set).
// Ejemplo de Tipo de Valor: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 obtiene una copia de p1
p2.x = 10 // Cambiar p2 no afecta a p1

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

Tipos de Referencia:

  • Los valores no se copian. Al asignar o pasar a una función,
  • se pasa una referencia al mismo ejemplar de datos en memoria.
  • Varias variables o constantes pueden referirse al mismo ejemplar.
  • Los cambios a través de una referencia son visibles en todas las demás.

Ejemplos de Tipos de Referencia:

  • Clases (class)
  • Funciones (func)
  • Cierres (closure)
// Ejemplo de Tipo de Referencia: class
class Circle {
    var radius: Double

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

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 referencia al mismo ejemplar que c1
c2.radius = 10.0 // Cambiar c2 afecta a c1

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

Tabla con los tipos principales:

Categoría Tipo(s) Tipo de Valor/Referencia Descripción
Enteros Int, UInt, Int8, UInt8, etc. Valor Números enteros de diferentes tamaños, con o sin signo
Punto flotante Float, Double Valor Números con parte fraccionaria
Booleanos Bool Valor Valores lógicos (true o false)
Cadenas String Valor Secuencia de caracteres
Colecciones Array, Dictionary, Set Valor Colecciones ordenadas/no ordenadas de elementos del mismo tipo
Estructuras struct Valor Tipos compuestos definidos por el usuario que almacenan valores relacionados
Enumeraciones enum Valor Definen un tipo común para un grupo de valores relacionados
Tuplas (value1, value2, ...) Valor Agrupan varios valores en un solo tipo compuesto
Clases class Referencia Tipos compuestos definidos por el usuario que soportan herencia y comportamiento por referencia
Funciones () -> Void, (Int) -> String, etc. Referencia Bloques de código ejecutable
Cierres { (parameters) -> return type in code } Referencia Bloques de código autónomos que pueden ser pasados y utilizados
Opcionales Type? (azúcar sintáctico para Optional<Type>) Valor Representa un valor del tipo Type o su ausencia (nil)

La elección entre Tipos de Valor y Referencia depende de la tarea: Los Tipos de Valor son preferibles para datos pequeños y para garantizar la seguridad en hilos, mientras que los Tipos de Referencia son adecuados para objetos complejos que requieren estado compartido y herencia.