Table of Contents
Open Table of Contents
Introducción
En el artículo anterior les hablé de una de las formas que existen en Go para cambiar el flujo de ejecución de un programa: if/else en este artículo hablaremos de otra se las formas en las que podemos hacer lo mismo, pero con una sintaxis más fácil de leer sobre todo cuando tenemos múltiples comparaciones.
Condicional Switch
Veamos un ejemplo sencillo del uso del condicional switch en el que tenemos un variable llamada meaningOfLife con un valor de 42, nuestro condicional switch toma esta variable como entrada y en base a su valor evalua caso a caso y cuando el valor de meaningOfLife coincida con el de uno de los casos, imprimiremos por consola un mensaje. En este ejemplo el resultado sería: The meaning of life is 42.
package main
import "fmt"
func main() {
switch meaningOfLife := 42; meaningOfLife {
case 10:
fmt.Println("El significado de la vida es 10")
case 20:
fmt.Println("El significado de la vida es 20")
case 30:
fmt.Println("El significado de la vida es 30")
case 40:
fmt.Println("El significado de la vida es 40")
case 42:
fmt.Println("El significado de la vida es 42")
default:
fmt.Println("No hay significado en la vida 🙃")
}
}
Algunas cosas a tener en cuenta con este ejemplo son las siguientes:
-
A diferencia de otros lenguajes de programación en los cuales el condicional switch require de la palabra reservada break, en Go no es necesario usarla.
-
La expresión que va justo después del switch no require paréntesis.
-
Es posible definir un switch con declaración tal y como sucede en el condicional if / else, y usar esa declaración dentro de los case tal y como sucede con la variable meaningOfLife.
Switch con múltiples constantes
Los case pueden tener múltiples constantes separadas por comas como podemos ver en el siguiente ejemplo.
package main
import "fmt"
func main() {
day := "domingo"
switch day {
case "lunes", "martes", "miércoles", "jueves", "viernes":
fmt.Printf("%s es un día de la semana\n", day)
default:
fmt.Printf("%s es un dia del fin de la semana\n", day)
}
}
Switch sin expresión
Un condicional switch sin expresión es muy parecido a un condicional if / else, en el cuál tenemos un switch sin una expresión que evaluar, posteriormente evaluamos los distintos casos y en base a eso decidimos el flujo de ejecución de nuestro programa.
package main
import "fmt"
func main() {
age := 20
switch {
case age < 18:
fmt.Printf("Tu edad es %d años: eres un niño 👦🏽\n", age)
case age >= 18 && age < 65:
fmt.Printf("Tu edad es %d años: eres un adulto 👨🏼🦰\n", age)
default:
fmt.Printf("Tu edad es %d años: eres un anciano 👨🏽🦳\n", age)
}
}
Type Switch
En el siguiente ejemplo vemos una forma de saber el tipo de dato de una variable usando un type switch y una serie de assertions, un type switch es como un switch regular pero los casos especifican tipos (no valores).
package main
import "fmt"
func main() {
fmt.Println(typeName(21)) // int
fmt.Println(typeName("Golang")) // string
fmt.Println(typeName(3.1415)) // unknown
}
func typeName(v interface{}) string {
switch v.(type) {
case int:
return "int"
case string:
return "string"
default:
return "unknown"
}
}
Switch con fallthrough
En Go cuando el control de flujo entra a un case este sale inmediatamente del switch después de ejecutar el bloque de código del case, una sentencia fallthrough es usada para transferir el control a la primera declaración del case que está presente inmediatamente después del case que se ha ejecutado. Esta solo se puede usar como la declaración final en una cláusula (al final de cada case).
package main
import "fmt"
func main() {
meaningOfLife := 42
switch meaningOfLife {
case 42:
fmt.Println("42")
fallthrough
case 10:
fmt.Println("10")
fallthrough
case 20:
fmt.Println("20")
}
}
// El resultado de este código sería:
// 42
// 10
// 20
Conclusión
Las condicionales son una parte muy importante para cualquier programa sin importar el lenguaje de programación ya que nos permite tomar decisiones basadas en ciertas condiciones, en esta ocasión vimos como usar la condicional switch, hasta la próxima 👋🏽.