Declaración de guardia rápida (con ejemplos)

En este artículo, aprenderá a usar la declaración de guardia para controlar el flujo de ejecución de su programa.

Swift If Statement describe cómo puede realizar acciones en función de determinada condición (valor booleano). En este artículo, exploraremos los beneficios de la declaración de protección sobre la declaración if para controlar el flujo del programa y escribir un código más simple y limpio.

Declaración de Swift Guard

El uso principal de la declaración de protección es transferir el control del programa fuera de un alcance en determinadas condiciones. Estas declaraciones son similares a las declaraciones if que ejecutan declaraciones basadas en cierta condición (valor booleano) pero a diferencia de if, las declaraciones de protección solo se ejecutan cuando no se cumplen ciertas condiciones.

Además, las declaraciones dentro de la guardia deben salir del alcance. Por lo tanto, tenemos que las sentencias de control del programa de usuario return, break, continueo throwal final de la instrucción de guardia.

Declaración de sintaxis de Guard

 expresión de guardia else (// declaraciones // deben contener una declaración de control: volver, romper, continuar o lanzar). 
  • Aquí, expresión es una expresión booleana (devuelve trueo false).
  • Si la expresión se evalúa en false, guardse ejecutan sentencias dentro del bloque de código de .
  • Si la expresión se evalúa en true, las declaraciones dentro del bloque de código de guardse omiten de la ejecución.

¿Cómo funciona la declaración de guardia?

Nota: El final de la instrucción de guardia debe contener una sentencia de control return, break, continueo throw.

Ejemplo 1: ¿Cómo funciona la declaración de guardia?

Una simple declaración de guardia válida es la siguiente:

 guard true else ( print("Condition not met") ) print("Condition met") 

Cuando ejecute el programa, la salida será:

 Condición cumplida

En el programa anterior, guard contiene un valor booleano verdadero (se cumple la condición). Dado que las declaraciones de guardia solo se ejecutan cuando no se cumple la condición, la declaración dentro de la guardia no se ejecuta. Es por eso que print("Condition met")se ejecuta la condición y las salidas se cumplen en la pantalla.

Ahora cambiemos la condición a falsa como:

Ejemplo 2: la declaración de guardia debe salir del alcance

 guard false else ( print("Condition not met") ) print("Condition met") 

En el programa anterior, la condición de protección se evalúa como false. Entonces, la declaración print("Condition not met")dentro de else debería ejecutarse. Pero obtendrá un error que dice que el cuerpo 'guard' puede no caer, considere usar un 'retorno' o 'lanzar' para salir del alcance.

El mensaje de error en el medio de palabras sencillas, es necesario transferir el control del programa a partir de la declaración de protección usando return, break, continueo throwdeclaraciones. Por ahora vamos a utilizar return. Y dado que la returndeclaración solo se puede usar dentro de una función, vamos a ajustar el código anterior en Swift Functions.

Ejemplo 3: declaración de guardia dentro de una función

Podemos usar la declaración de guardia dentro de una función en Swift como:

 func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call") 

Cuando ejecute el programa anterior, la salida será:

 Condición no cumplida Hola después de la llamada a la función 

En el programa anterior, la condición de protección se evalúa false, por lo tanto, se ejecutan las declaraciones dentro de la protección. La primera declaración print("Condition not met")genera la Condición no cumplida en la consola.

Y la declaración returntermina la ejecución de una función y la declaración print("Hello, after function call")después de la llamada a la función se ejecuta, lo que genera un saludo después de la llamada a la función en la consola.

Ejemplo 4: Guardia con opcionales

Hemos visto en Swift Optionals el uso de if-letpara desenvolver un archivo opcional. Sin embargo, también podemos usar una declaración de guardia en lugar de if-letpara desenvolver un opcional con una ventaja. La principal ventaja de desenvolver un opcional con guard en lugar de if-letes que podemos aumentar el alcance de la variable desenvuelta .

Veamos esto en el siguiente ejemplo:

 func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase() 

Cuando ejecute el programa anterior, la salida será:

El nombre es nulo. No se puede procesar

En el programa anterior, puede ver que el valor no empaquetado temp se está utilizando fuera del alcance definido por la declaración de guardia. Dado que el nombre se define como opcional y contiene un valor nulo, la declaración de protección no puede desenvolver el valor.

Entonces, las declaraciones dentro de guard else ejecutan que imprimen Name is nil. No se puede procesar en la salida y finaliza la función con una returndeclaración. El código equivalente de la declaración de protección anterior declaración if-else es:

 func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase() 

Observe que dos declaraciones son válidas y hacen el mismo trabajo. Pero usando la declaración if-let no puede usar el valor sin envolver fuera de la declaración if-let. Pero con la declaración de guardia puede usar el valor sin envolver en toda la función.

Ejemplo 5: Guardia con múltiples condiciones

Las declaraciones de protección también pueden encadenar varias condiciones separadas por comas (,) como:

 func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()

Cuando ejecute el programa anterior, la salida será:

El nombre es nulo o una cadena vacía. No se puede procesar

En el programa anterior, la declaración de protección contiene dos condiciones separadas por comas.

La primera condición let temp = namedesenvuelve un opcional que regresa trueen nuestro caso y la segunda condición temp.count> 0verifica si la cadena desenvuelta tiene más de 0 caracteres que se evalúa falseen nuestro ejemplo.

Por lo tanto, la declaración dentro de la declaración de guardia ejecuta una declaración print("Name is nil or an empty string. Cannot process")que da como resultado Name es nil o una cadena vacía. No se puede procesar en la consola y finaliza la función con una returndeclaración.

Articulos interesantes...