Programación en Go. Mario Macías Lloret

Чтение книги онлайн.

Читать онлайн книгу Programación en Go - Mario Macías Lloret страница 11

Автор:
Серия:
Издательство:
Programación en Go - Mario Macías Lloret

Скачать книгу

      Por brevedad, se ha omitido la definición del paquete y los import.

      En el programa anterior, siempre se ejecutará uno de los dos bloques en exclusiva: o el código dentro del bloque if (en caso de que valor sea divisible por dos), o el código dentro del bloque else (en caso de que valor no sea divisible por dos); pero nunca se ejecutarán los dos bloques a la vez.

      En los ejemplos anteriores, la variable valor existe y es accesible durante toda la vida de la función main, incluso si solo se necesita en el contexto de los bloques if y else. Es una buena práctica restringir el ciclo de vida de una variable lo máximo que se pueda.

      Go permite definir una variable dentro de un if, limitando su ciclo de vida a la evaluación de la condición y las instrucciones de los bloques if y else:

illustration

      Aplicándolo al ejemplo anterior:

illustration

      La diferencia es que, mientras anteriormente se podía usar la variable valor en cualquier punto de la función main(), con esta nueva forma la variable valor deja de existir después del bloque else (por ejemplo, no podríamos imprimir su valor en el mensaje de despedida).

illustration

      CONSEJO: Limitar al máximo la vida de una variable nos ahorrará muchos errores en nuestros programas, algunos de ellos difíciles de detectar.

      3.1.3 switch - case

      Cuando una variable puede tomar múltiples valores de una enumeración concreta, y se debe realizar una acción distinta para cada uno de estos valores, la forma más concisa de expresarlo es mediante un bloque switch/case:

illustration

      La orden switch también puede incluir una inicialización de variable, similar a la forma if anteriormente vista:

      switch <inicialización variable> ; <expresión a evaluar>

      El siguiente ejemplo hace uso del paquete runtime y sus variables globales runtime.GOARCH y runtime.GOOS para extraer información de la arquitectura y del sistema operativo en el que el programa se ejecuta. Como en muchos otros ejemplos a partir de ahora, se omite la definición del paquete, los import y la definición de la función main().

illustration illustration

      El código anterior mostraría algo similar al siguiente texto (dependiendo del ordenador en el que lo ejecutara):

      La arquitectura de su procesador es x86 de 64 bits Su sistema operativo es windows

      El primer bloque switch del ejemplo anterior evaluará el valor de la variable arch y mostrará un mensaje distinto dependiendo de si esta variable contiene "386" o "amd64" (valores definidos en las cabeceras de sus respectivos bloques case). El bloque default: se ejecutará si el valor de la variable arch no coincide con ninguno de los valores definidos tras cada case (por ejemplo, si su procesador fuera un ARM, comúnmente usado en tablets y teléfonos inteligentes).

      La variable arch, definida en la función main, existirá y será visible desde cualquier punto de la función main (a partir de la declaración de la variable). Sin embargo, observe que el segundo bloque switch define la variable os en la misma línea en la que se comprueba (separado por punto y coma, de manera análoga al bloque if de la sección anterior). En este caso, la existencia y visibilidad de la variable os se limitará al bloque switch.

      Si el lector está familiarizado con otros lenguajes de programación, como Java o C, habrá notado la ausencia de la palabra break al final de cada bloque case. En aras de la brevedad, Go la omite. Cuando finaliza el código dentro de un bloque case, el flujo del programa continúa fuera del switch.

      Si por algún motivo fuera necesario que, tras acabar el código de un case, el flujo continuara por el siguiente bloque case, se debe usar el comando fallthrough. Ejemplo:

illustration

      En el ejemplo anterior:

      • Si letra == 'a' se mostrará Primera del abecedario.

      • Si letra == 'A' se mostrará tanto Mayúscula como primera del abecedario.

      Se pueden especificar diferentes valores, separados por comas, detrás de un case. Go ejecutará el código para ese caso si la expresión a comprobar coincide con alguno de esos valores:

illustration

      La orden switch permite un análisis de patrones más complejo (hasta cierto punto, equivalente a varios if-else encadenados). Por ejemplo:

illustration

      Observe que, en este caso, la orden switch no especifica ninguna variable, ya que la comprobación de esta se hace en el case.

      3.2 ÓRDENES ITERATIVAS (BUCLES for)

      Un bucle es un conjunto de órdenes que se repite. El bucle más sencillo que Go permite especificar es:

illustration

      El bucle anterior es un “bucle infinito”. Si un programa llega a ese punto, el programa jamás continuará más allá del bucle for, a no ser que el bucle se rompa con la instrucción break:

illustration

      El ejemplo anterior repite un bucle en el que el programa pide un carácter al usuario, y se repite hasta que el usuario introduce el carácter 'S' o 's' , momento en el que el bucle se rompe mediante la instrucción break.

      La instrucción continue rompe el flujo de cada iteración de un for. En este caso, el flujo del programa salta de nuevo al inicio del bucle, sin ejecutar las instrucciones restantes de la iteración en que se invoca.

illustration illustration

      El ejemplo anterior se comportaría de la siguiente manera:

      Salir? (s/n): a carácter no reconocido Salir? (s/n): n Salir? (s/n): s adiós!

      De acuerdo con el código del ejemplo:

      •

Скачать книгу