Métodos Mutantes en Estructuras y Enumerados en Swift
Clase 12 de 27 • Curso de Programación Orientada a Objetos en Swift
Contenido del curso
- 5

Propiedades Almacenadas en Swift: Uso y Ejemplos Prácticos
04:49 - 6

Propiedades Lazy en Programación: Uso y Ventajas
07:17 - 7

Propiedades Computadas en Swift: Uso y Ejemplos Prácticos
10:31 - 8

Variables de solo lectura en programación y su uso en estructuras y clases
05:14 - 9

Implementación de Observers en Propiedades de Clases en Swift
07:18 - 10

Variables estáticas en clases, estructuras y enumerados
09:19
- 11

Métodos en Clases y Estructuras: Creación y Uso Práctico
07:35 - 12

Métodos Mutantes en Estructuras y Enumerados en Swift
09:05 - 13

Métodos Estáticos y Herencia en Programación de Videojuegos
10:50 - 14

Subíndices en Swift: Sintaxis y Aplicaciones Prácticas
09:02 - 15

Manipulación de Matrices y Subíndices en Programación
12:41 - 16

Herencia de Clases en Programación Orientada a Objetos
10:14 - 17

Sobrescritura de Métodos y Propiedades en Clases Derivadas
12:12
- 18

Inicializadores en Sweet: Creación y Uso Efectivo de Constructores
06:51 - 19

Modificación de Constructores y Parámetros Opcionales en Swift
00:10 - 20

Constructores Designados y de Conveniencia en Herencia de Clases
09:38 - 21

Constructores y manejo de inicialización opcional en Swift
08:42 - 22

Destructores en Programación: Liberación de Recursos Automática
07:13
¿Qué son las funciones mutantes en estructuras y enumerados?
En el mundo de la programación, las estructuras y enumerados son tipos de datos evaluables que, una vez definidos como constantes, no permiten modificar sus valores internos. Sin embargo, en lenguaje Swift, es posible cambiar estos valores a través de métodos llamados funciones mutantes. Este tipo de función utiliza la palabra reservada mutating para indicar que puede modificar los valores de las propiedades de una estructura o enumerado.
¿Cómo funciona una función mutante en una estructura?
Para entender el uso de una función mutante en estructuras, consideremos el siguiente ejemplo donde tenemos una estructura llamada Punto:
struct Punto {
var x: Int
var y: Int
mutating func mueve(deltaX: Int, deltaY: Int) {
x += deltaX
y += deltaY
}
}
En este caso, como la función mueve está marcada como mutating, tiene el derecho de modificar los valores de x y y dentro de la estructura Punto. Si nuestro punto es un variable, podemos usar este método para cambiar las coordenadas de manera segura.
¿Por qué es importante la palabra clave mutating?
La palabra reservada mutating es crucial porque:
- Permite que las funciones cambien los valores de una propiedad dentro de una estructura o enumerado.
- Resuelve errores de compilación que surgen por intentar modificar propiedades de tipos inmutables.
- Indica explícitamente un comportamiento que puede sorprender si no se deja claro, es decir, que ciertas acciones pueden cambiar el estado de un objeto.
¿Existen casos especiales para el uso de mutating?
Sí, un caso relevante para usar funciones mutantes es cuando queremos modificar el propio valor de toda la estructura. Imaginemos un método dentro de la misma estructura Punto:
mutating func reposicionar(x: Int, y: Int) {
self = Punto(x: x, y: y)
}
Aquí, estamos creando un nuevo punto con las coordenadas proporcionadas y reasignándolo a self. Este tipo de función, gracias a la palabra mutating, permite reconfigurar completamente la estructura desde dentro.
¿Cómo actúan las funciones mutantes en los enumerados?
Los enumerados, al igual que las estructuras, pueden beneficiarse de funciones mutantes para alterar sus estados. Supongamos que implementamos un ciclo de estados para un aire acondicionado:
enum EstadoAireAcondicionado {
case apagado, bajo, alto
mutating func avanzaEstado() {
switch self {
case .apagado:
self = .bajo
case .bajo:
self = .alto
case .alto:
self = .apagado
}
}
}
En este ejemplo, la función avanzaEstado utiliza mutating para permitir que el estado del aire acondicionado cambie de manera cíclica entre apagado, bajo y alto.
Consideraciones al usar funciones mutantes
Al trabajar con funciones mutantes, es importante considerar lo siguiente:
- Las funciones mutantes solo pueden ser invocadas en variables de estructuras o enumerados, no en constantes.
- Este tipo de función es innecesario en clases ya que las clases se manejan por referencia, no por valor.
Las funciones mutantes ofrecen una potente herramienta para modificar los valores interiores de estructuras y enumerados de una manera controlada y explícita, permitiendo mayor flexibilidad en el manejo de datos inmutables.