Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift
Code

Swift 2: Salir rápido con un 'guard'

by
Difficulty:BeginnerLength:ShortLanguages:

Spanish (Español) translation by steven (you can also view the original English article)

¿Te sorprende que estoy dedicando un tutorial a una simple adición como la declaración guard? Espero que comprendas mejor mi emoción al final de este tutorial. Durante este tutorial, espero convencerte de que la protección mediante guard no es una adición redundante al lenguaje de programación Swift.

Minimizando la complejidad

Los condicionales son un componente fundamental de cada lenguaje de programación. Objective-C y Swift no son una excepción a esta regla. Si planeas escribir una aplicación de cualquier complejidad, los condicionales se cruzarán en tu camino, no hay escapatoria.

Desafortunadamente, los condicionales son a menudo la causa de la complejidad. Los condicionales anidados en particular pueden conducir a errores difíciles de encontrar, código difícil de entender y casos límite fácilmente ignorados.

Para mantener las sentencias if anidadas al mínimo, con frecuencia uso el siguiente patrón en Objective-C.

La idea es rescatar lo antes posible. Las declaraciones if en el ejemplo representan un conjunto de requisitos que deben cumplirse antes de ejecutar el resto del cuerpo del método.

El ejemplo anterior se traduce en el siguiente equivalente ligeramente más complejo.

¿Ves el problema al acecho en este ejemplo? Ya hemos anidado dos niveles de profundidad sin haber hecho nada interesante.

Es fácil traducir el patrón anterior a Swift. La sintaxis es similar, pero debido a que los customers son opcionales, necesitamos desenvolver el argumento de los customers antes de poder acceder a su valor.

Saliendo pronto

Swift 2 presenta la declaración guard. Fue diseñado específicamente para salir pronto de un método o función. La declaración guard es ideal para deshacerse de condicionales profundamente anidados cuyo único propósito es validar un conjunto de requisitos. Echa un vistazo al ejemplo actualizado en el que he reemplazado cada declaración if con la nueva declaración de un guardia o guard.

Hay varias cosas que vale la pena señalar. Comencemos con la sintaxis.

Sintaxis

La palabra clave guard enfatiza que estamos validando un requisito. Nos estamos protegiendo contra algo. En el ejemplo, verificamos explícitamente si reachable y connected están en true. Si no lo son, entonces salimos del método temprano. El punto es que la sintaxis es más explícita sobre los requisitos que una instrucción if normal.

Salida

Ten en cuenta que una declaración guard siempre tiene una cláusula else. La cláusula else se ejecuta si la condición de la declaración de protección se evalúa como false. Usar guard tiene mucho más sentido cuando validas los requisitos.

En la cláusula else, debes transferir el control fuera del alcance en el que aparece la declaración guard. Usamos una declaración return en el ejemplo anterior, pero podrías, por ejemplo, usar una declaración continue si estás en un bucle o arroja un error. Echa un vistazo al siguiente ejemplo actualizado en el que arrojamos un error en la cláusula else. Ten en cuenta la palabra clave throws en la declaración del método para indicar que fetchListOfCustomers(_ :) es un método de lanzamiento.

Potencia

Una declaración guard es tan poderosa como una declaración if. Puedes usar enlaces opcionales e incluso el uso de las cláusulas where, introducidas en Swift 1.2, está permitido. Estoy seguro de que estás de acuerdo en que el ejemplo es fácil de entender, eliminando condicionales anidados innecesarios.

Alcance

Una diferencia importante con las declaraciones if es el alcance de las variables y las constantes a las que se asignan valores mediante un enlace opcional. En el ejemplo anterior, a la constante customers se le asignó un valor utilizando un enlace opcional. Se puede acceder a la constante customers desde el alcance en el que aparece la declaración guard. Este es un detalle importante y una de las ventajas clave de usar la protección mediante guard.

Conclusión

Si pensabas que ese guard era una variación simple de la declaración if de Swift, entonces espero haberte convencido de lo contrario. Si bien las declaraciones if seguirán siendo tu herramienta de elección en la mayoría de las situaciones, guard tiene una serie de ventajas en ciertas situaciones. Esto es especialmente cierto si se usa en combinación con el manejo de errores, que también se introdujo en Swift 2.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.