Las computed properties en Swift permiten calcular valores al vuelo y mantener la coherencia del modelo. Aquí verás cómo usar getter y setter para obtener y modificar el center de un rectángulo a partir de su origin y size, evitando inconsistencias comunes entre stored properties.
¿Qué es una computed property y por qué evita inconsistencias?
Una computed property no almacena datos: los calcula según otras propiedades. Así se evita duplicar información y caer en desajustes entre variables relacionadas.
stored properties: datos guardados como x, y, width, height.
computed property: valor derivado como center.
Beneficio clave: si cambias el center, el setter ajusta el origin sin tocar el size.
¿Cómo se evita el desajuste entre origin, size y center?
Definiendo center como computed property.
Con un getter que calcula el centro: origin.x + width/2 y origin.y + height/2.
Con un setter que, dado un nuevo centro, actualiza origin.x e origin.y restando la mitad de width y height.
¿Qué conceptos y habilidades se practican?
Modelado con estructuras: Point, Size, Rect.
Uso de getter y setter para encapsular lógica.
Cálculo geométrico 2D: mitades de width y height.
Estilo Swift: return implícito en getters de una línea y uso de newValue en setters.
¿Cómo implementar getters y setters en Swift con un rectángulo?
A partir de un Rect definido por origin: Point y size: Size, se calcula un center: Point. El getter suma la mitad de la anchura y altura; el setter reposiciona el origen conservando el tamaño.
¿Qué ejemplos muestran el cálculo del centro y los efectos del setter?
Con un cuadrado de 10 por 10 cuyo origen es (0, 0), el centro se calcula y se actualiza automáticamente al cambiarlo.
var square =Rect( origin:Point(x:0, y:0), size:Size(width:10, height:10))let initialSquareCenter = square.center // (5, 5)// Mover el centro a (20, 20): ajusta el origen a (15, 15)square.center =Point(x:20, y:20)// Mover el centro a (18, 3): ajusta el origen a (13, -2)square.center =Point(x:18, y:3)
¿Qué patrones de código optimizan el resultado?
En el getter, una sola línea permite return implícito.
En el setter, puedes omitir el nombre y usar newValue.
Menos líneas y menos variables intermedias para código más claro.
¿Te gustaría ver más patrones de uso de computed properties o casos con otras figuras geométricas? Comparte tu duda o ejemplo ideal para explorarlo juntos.
Menos líneas != mejor código. A veces es mejor un código extenso pero fácil de entender que uno corto que no se entiende
Totalmente, sobre todo teniendo en cuenta que como Swift es un lenguaje de alto nivel, no hace falta preocuparse demasiado tampoco por crear variables extras, y si eso ayuda a la expresividad muchas veces es preferible.
Como el manifiesto de pyhton.
Estas propiedades calculadas me llamaron la atención porque ciertamente cuando se definen estructuras o clases podemos tener propiedades que su valor va depender de los valores de otras propiedades y a veces no es tan sencillo como una asignación y ya, entonces estas palabras claves get y set son tremendamente util.
Algo muy usado en librerias como pinia en Vue.js
Me parecio muy interesante esta clase, si hay alguien a quién se le dificulto, no se preocupen, pueden intentar viendola una vez y haciendo manualmente el ejercico. Dibujemos un plano cartesiano y hagamos los rectangulos. Haciendo esto nos quedaría más clara la teoria y ya despues nos pasamos a escribir código.
me mata lo de reducir lineas de codigo en swift, sobre todo cuando manejas otros lenguajes como js, ts, python, creo que lo mejor es seguir los mismos estandares
Las Computed Properties en Swift son propiedades que no almacenan un valor directamente, sino que calculan su valor mediante un método. Se definen usando un getter y opcionalmente un setter. Su valor se recalcula cada vez que se accede a ellas, lo que las hace útiles para mantener la consistencia de los datos en estructuras y clases.
Por ejemplo, en un rectángulo, el centro podría ser una Computed Property calculada a partir del origen y el tamaño, evitando así errores al modificar el centro. Esto permite encapsular la lógica de cálculo y mantener la integridad de los datos.