Optionals en Swift: ¿Qué son y por qué son tan importantes?

Los Optionals son un concepto fundamental en el lenguaje de programación Swift. Aunque pueden parecer intimidantes al principio, son una herramienta poderosa para ayudarte a escribir un código más seguro y robusto.

Contenido { }

Ejercicios { }

¿Qué son los optionals en swift?

Un Optional en swift es un tipo de dato que puede contener un valor o estar vacío (nil).

Los Optionals se representan añadiendo un signo de interrogación ? al final del tipo de dato que se está declarando.

Ejemplo:

				
					var rupees: Int?
var hasMasterSword: Bool?
var currentWeapon: String?
				
			
  • La variable rupees es de tipo Optional Int y puede contener un valor Int o estar vacía (nil).
  • La variable hasMasterSword es de tipo Optional Bool y puede contener un valor Bool o estar vacía (nil).
  • La variable currentWeapon es de tipo Optional String y puede contener un valor String o estar vacía (nil).

 

En resumen, el primer paso para entender los optionals en swift es identificarlos y ahora sabemos que un optional se identifica mediante el signo de interrogación «?» que se coloca al final del tipo de dato que se está declarando.

¿Cómo asignar un valor a una variable optional?

En Swift, podemos asignar un valor a una variable optional como normalmente lo hacemos con cualquier otra variable, utilizando el operador de asignación "=".

Tomando en cuenta el ejemplo anterior, asignemos un valor a cada una de nuestras variables optionals:

				
					rupees = 100
hasMasterSword = false
currentWeapon = "Boomerang"
				
			

Al asignar un valor a una variable optional, su estado cambia de nil a un valor optional concreto, es decir, nuestra variables que anteriormente se encontraban vacías (nil) ahora tienen asignado un valor.

¿Qué sucede si imprimimos en consola nuestras variables optionals?

				
					print(rupees) // Optional(100)
print(hasMasterSword) // Optional(false)
print(currentWeapon) // Optional("Boomerang")
				
			

Cuando imprimimos un valor de una variable optional sin desempaquetar, se muestra la palabra Optional en el resultado para indicar que el valor es opcional y que puede ser nil.

¿Qué es desempaquetar un valor optional?

Desempaquetar un valor opcional significa extraer el valor concreto que se encuentra dentro de una variable opcional y asignarlo a una variable o constante no opcional.

¿Como desempaquetar un valor optional?

Existen varias formas de desempaquetar optionals en Swift. Aquí te enseñare las que bajo mi experiencia te serán de mayor utilidad y te encontrarás más a menudo en diferentes proyectos.

Optional Binding

Este método se utiliza para desempaquetar un optional y asignar su valor a una variable temporal en caso de que el optional tenga un valor.

Las formas más comunes de hacer optional binding son utilizando el operador de asignación opcional if let y el operador de asignación opcional y condicional guard let, tambien conocido como guard statement.

Optional Binding: if let

				
					var treasureChest: String?
treasureChest = "Hylian Shield"

if let chestContent = treasureChest {
	print(chestContent) // "Hylian Shield"
} else {
}
				
			

El operador «if let», se utiliza para verificar si el optional contiene un valor no nulo. Si es así, el valor se asigna a una nueva variable temporal y se ejecuta el código dentro del bloque «if». Si el optional es nulo, el código dentro del bloque «else» se ejecutará.

En el caso de nuestro ejemplo, la variable optional «treasureChest» no es nil, por lo tanto se puede utilizar la variable «chestContent» que contiene el valor desempaquetado de la variable «treasureChest».

Optional Binding: guard let (guard statement)

La guard statement se debe utilizar en una función para comprobar si una condición se cumple y si no se cumple, se utiliza la cláusula else para especificar las acciones que se deben realizar, como mostrar un mensaje de error y/o salir de la función.

				
					var treasureChest: String?
treasureChest = "Hylian Shield"

func unwrappingChest(){
	guard let chestContent = treasureChest else {
    return
		}
		print(chestContent)
}

unwrappingChest() // "Hylian Shield"
				
			

En el caso de nuestro ejemplo la variable opcional «treasureChest» no es nil, por lo tanto se puede utilizar la variable «chestContent» que contiene el valor desempaquetado de la variable «treasureChest».

Nil Coalescing

El operador nil-coalescing (??) nos permite proporcionar un valor predeterminado en caso de que el optional tenga un valor nil

				
					var treasureChest: String?
treasureChest = "Hylian Shield"

print(treasureChest ?? "Empty") 

				
			

Tomando como referencia nuestro ejemplo, la variable opcional «treasureChest» no es «nil» por lo que al usar o imprimir su valor tendremos como resultado su valor «Hylian Shield», sin embargo, si nuestra variable fuera «nil» su valor predeterminado seria «Empty»

Forced Unwrapping

Este operador se utiliza para forzar el desempaquetado de un optional, asumiendo que siempre tendrá un valor. Sin embargo, si el optional es nil, esto provocará un error de tiempo de ejecución.

				
					var treasureChest: String?
treasureChest = "Hylian Shield"

print(treasureChest!) // "Hylian Shield"
				
			

¿Qué técnica elegir para desempaquetar variables optionals?

La elección de cuál de estas técnicas de desempaquetado de opcionales usar (guard let, if let y Nil Coalescing) depende de la situación y del contexto de su aplicación. A continuación, describo algunos escenarios en los que cada técnica puede ser más adecuada:

 

  • Guard let: se utiliza principalmente para verificar que un optional tenga un valor y, si no lo tiene, salir de la función o realizar alguna acción específica. Es una buena opción cuando queremos asegurarnos de que el optional tiene un valor antes de continuar con el resto de la función. El uso de guard let también ayuda a evitar la indentación excesiva del código y a hacer que el código sea más legible.
  • If let: se utiliza principalmente para desempaquetar un optional y asignarlo a una constante o variable, y luego realizar alguna acción específica con ese valor. Es una buena opción cuando queremos realizar una acción solo si el optional tiene un valor, pero no necesariamente necesitamos salir de la función si no lo tiene. También es una buena opción si necesitamos usar el valor desempaquetado varias veces dentro de la misma función.
  • Nil Coalescing: se utiliza principalmente para proporcionar un valor predeterminado si un optional no tiene un valor. Es una buena opción cuando queremos usar un valor predeterminado en caso de que el optional sea nil. El uso de Nil Coalescing también es útil cuando necesitamos desempaquetar un optional y asignarlo a una variable o constante, y proporcionar un valor predeterminado si el optional es nil.
  • Forced Unwrapping: se utiliza principalmente cuando se sabe con certeza que una variable opcional tiene un valor concreto y seguro, y se desea utilizar ese valor de manera inmediata en el programa.

 

En general, la elección de la técnica de desempaquetado de opcionales depende de la situación y el contexto en el que se esté usando, y puede ser una elección personal o de estilo de programación.

¡Compártelo en tus redes!

Contenido 📂

Recursos { }