Estructuras y Clases en Swift


Memorizar

Amo la programación y todo lo relacionado a la administración de sistemas. En particular la terminal.app en la Mac, BASH y Swift.

Swift es un lenguaje moderno creado por Apple y que funlsciona tal como esperarías que funcione un lenguaje de programación creado por la empresa de la manzanita. Como forma de afianzar mi viaje poniendo swift en práctica, voy a empezar una serie de artículos sobre los conceptos más desafiantes.

Uno de los conceptos que pueden confundir al principio del aprendizaje puede ser entender las diferencias entre Structs y Clases.

La diferencia más grande entre estructuras y clases es cómo manejan el almacenamiento y la transferencia de datos.

• Estructuras (Structs): Son tipos por valor, lo que significa que cada vez que las pasas a una función o las asignas a otra variable, estás trabajando con una copia independiente. Si haces un cambio en la copia, el valor original no se ve afectado.

• Clases (Classes): Son tipos por referencia, lo que significa que cuando asignas una clase a otra variable o la pasas a una función, lo que estás compartiendo es una referencia al mismo objeto en la memoria. Por eso, si haces un cambio en una de las referencias, ¡todas las demás lo reflejan!

Ejemplos

Output

Memorization is like repetition, do you feel it?.
Rob Pike1

struct PersonaStruct {
    var nombre: String
}
class PersonaClass {
    var nombre: String
    
    init(nombre: String) {
        self.nombre = nombre
    }
}

Estructura: tipo por valor con referencia a otros valores que se muestran en la estructura.

var persona1 = PersonaStruct(nombre: "Ana")
var persona2 = persona1
persona2.nombre = "Luis"
print(persona1.nombre) // Salida: "Ana"
print(persona2.nombre) // Salida: "Luis"
// Clase: tipo por referencia
var persona3 = PersonaClass(nombre: "Carlos")
var persona4 = persona3
persona4.nombre = "Sofia"
print(persona3.nombre) // Salida: "Sofia"
print(persona4.nombre) // Salida: "Sofia"

Este pequeño ejemplo te muestra cómo las estructuras mantienen su propio espacio en la memoria (por eso persona1 sigue siendo “Ana”), mientras que las clases comparten el mismo objeto (por eso persona3 y persona4 reflejan el mismo cambio).

Footnotes

  1. The above quote is excerpted from Rob Pike’s talk during Gopherfest, November 18, 2015.