🥥Flujo If, For, While, Switch

Aqui en está sección veremos algunos condicionales, ciclos y bucles dentro del lenguaje de programación Golang.

Flujo IF ->

Este es el tipo de condición en el cual si se cumple una verdad o una condición en especifico se realiza tal acción.

//FLUJO IF
edad := 18
if edad >= 18 && edad <= 55 {
    fmt.Println("Es un adult@")

}else if edad < 18 {
    fmt.Println("es un niñ@")
}else {
    fmt.Println("Es un ancian@")
}

Ciclo FOR →

La estructura del ciclo for la usamos mucho para poder iterar sobre algunas estructuras de datos, arrays, maps, matrices, etc. esto con el fin de bajo un rango de iteraciones especificas lograr completar toda la estructura de datos o si no es para una estructura de datos simplemente realizar una acción n cantidad de veces

//FLUJO FOR
for i := 0; i <= 10; i++ {
    fmt.Println("FOR:", i)
}
	
nombre := "Felipe"

for i := 0; i < 6; i++ {
    fmt.Println(i, string(nombre[i]))
}

En GO no existe el WHILE (su palabra) →

En este caso bajo la sintaxis del lenguaje GO el while no existe como tal con la palabra while sin embargo se representa con el mismo for WTF? como así, exacto, simplemente cambia un poco la sintaxis convencional del FOR para ajustarse al while dentro de go, veamos:

package main 

func main(){

    edad := 22
    for edad != 22{	
       fmt.Println("No entrará en la condición de while con el for")	
    }
    //Pero si lo modificamos un poco para que sea un bucle while "infinito" se podría decir, sería así
    edad2 := 22
    for edad2 != 23{	
       fmt.Println("Va a entrar en este ciclo interminable") 
       //Realmente es finito, hasta donde aguanten los recursos del sistema o pc.	
    }		
}

Sentencia BREAK →

  • En Go, la instrucción break finaliza la ejecución del bucle actual. Una instrucción break casi siempre se sincroniza con una instrucción condicional if.

  • Es importante recordar que la instrucción break solo detendrá la ejecución del bucle más interno en el que se invoca. Si tiene un conjunto de bucles anidados, necesitará una instrucción break para cada bucle, si lo desea.

for i := 0; i < 10; i++ {
    if i == 5 {
      fmt.Println("Breaking out of loop")
    break // break here
    }
      fmt.Println("The value of i is", i)
    }
      fmt.Println("Exiting program")

Sentencia Continue →

  • La instrucción continue se usa cuando se busca omitir la parte restante del bucle, volver a la parte superior de este y continuar con una nueva iteración.

  • Como en el caso de la instrucción break, la instrucción continue se utiliza comúnmente con una instrucción if condicional.

package main

import "fmt"

func main() {
	for i := 0; i < 10; i++ {
		if i == 5 {
		    fmt.Println("Continuing loop")
		    continue // break here
		}
		fmt.Println("The value of i is", i)
	}
	fmt.Println("Exiting program")
}

Sentencia RANGE →

Range es una palabra clave que se utiliza en conjunto con la instrucción forpara crear bucles que recorren elementos de una colección. Esta colección puede ser un array, un slice, un mapa, un canal o incluso una cadena de texto.

Destacar la palabra clave range que nos permite poder iterar con secuencia de datos. range devuelve siempre dos argumentos: índice y valor. Para ignorar cualesquiera de los valores devueltos hay que usar _ para que el compilador de Go entienda que no vamos a usar esa variable.

¿Cómo funciona Range?

En términos simples, range descompone la colección en sus elementos individuales y los asigna a variables dentro del bucle for. Cada iteración del bucle procesa un elemento de la colección.

Sintaxis basica:

for <variable> := range <colección> {
  // Bloque de código que se ejecuta para cada elemento
}

Recorrer un array:

numeros := []int{1, 2, 3, 4, 5}

for numero := range numeros {
  fmt.Println(numero)
}

Recorrer un mapa:

paises := map[string]string{
  "es": "España",
  "mx": "México",
  "co": "Colombia",
}

for pais, nombre := range paises {
  fmt.Println(pais, ":", nombre)
}

En este caso, range devuelve dos valores: la clave (pais) y el valor (nombre) del mapa. El bucle itera sobre cada par clave-valor del mapa, imprimiendo la información en formato clave:valor.

Ignorar valores: Si solo te interesa la clave o el valor de una colección, puedes usar un guion bajo (_) como marcador de posición para ignorar el valor no deseado.

for pais := range paises {
  fmt.Println(pais)
}

Obtener índice y valor: En el caso de arrays y slices, puedes obtener el índice actual del elemento además del valor utilizando dos variables.

numeros := []int{1, 2, 3, 4, 5}

for i, numero := range numeros {
  fmt.Println(i, ":", numero)
}

Recorrer cadenas: Range también funciona con cadenas de texto, iterando sobre cada carácter Unicode.

frase := "Hola mundo!"

for _, caracter := range frase {
  fmt.Println(caracter)
}

Dominar el uso de range me ayudará a escribir código más limpio, conciso y fácil de entender. Experimenta con range en tus propios proyectos y descubre todo su potencial.


Sentencia Switch →

La instrucción switch comienza con la palabra clave switch y le sigue, en su forma más básica, alguna variable contra la cual puedan realizarse comparaciones. A esto le sigue un par llaves ({}) en el que pueden aparecer varias_ cláusulas de caso_. Las cláusulas de caso describen las acciones que su programa de Go debe realizar cuando la variable proporcionada a la instrucción switch es igual al valor referido por las cláusulas de caso. El siguiente ejemplo convierte el ejemplo anterior para que utilice switch en lugar de varias instrucciones if:

//SENTENCIA SWITCH
var frutas map[string]int = map[string]int{"pera": 1, "manzana": 2, "sandia": 3} //map almacena en clave:valor
for fruta, precio := range frutas {
	if fruta == "pera" {
	    fmt.Println("Es una pera con precio:", precio)
	    continue
	} else if fruta == "manzana" {
	    fmt.Println("Es una manzana con precio:", precio)
	    continue
	} else {
	    fmt.Println("Es una sandia, su precio es:", precio)
	    break
	}
}
//PARA ESTE TIPO DE CONDICIONALES ES QUE USAMOS LA SETENCIA SWITCH, debido a que se manejan multiples valores para una variable que recorremos, en este frutas en un map.
for fruta, _ := range frutas {
    switch fruta {
	case "sandia":
	     fmt.Println("Es sandia")
	case "manzana":
	     fmt.Println("Es manzana")
	default:
	     fmt.Println("Es pera")
    }
}
  • Switch funciona para esos casos else para poder englobar y tomar todo lo general, evitando muchos else if’s.

Juego de adivinanzas con sentencia Switch →

target := rand.Intn(100)

for {
   var guess int
   fmt.Print("Enter a guess: ")
   _, err := fmt.Scanf("%d", &guess)
   if err != nil {
      fmt.Println("Invalid guess: err:", err)
      continue
   }

   switch {
   case guess > target:
   fmt.Println("Too high!")
   case guess < target:
   fmt.Println("Too low!")
   default:
   fmt.Println("You win!")
   return
   }
}

Eso sería todo si llegaste hasta aquí gracias por leerme y espero te haya servido :)

Last updated