134 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			134 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Switch in Go | ||
|  | localeTitle: Cambiar en go | ||
|  | ---
# Cambiar en go
 | ||
|  | 
 | ||
|  | La declaración de cambio de Go es una alternativa a `if` . Utiliza la siguiente sintaxis: | ||
|  | 
 | ||
|  | ```go | ||
|  | fruit := "apple"  | ||
|  |  switch fruit {  | ||
|  |     case "banana":  | ||
|  |         fmt.Printf("Yellow and long.")  | ||
|  |     case "apple":  | ||
|  |         fmt.Printf("Red and round.")  | ||
|  |     case "lemon":  | ||
|  |         fmt.Printf("Yellow and round.")  | ||
|  |  }  | ||
|  | ``` | ||
|  | 
 | ||
|  | La salida de este programa sería `Red and round.` . | ||
|  | 
 | ||
|  | Primero, declaramos la `fruit` variable como `apple` . Luego usamos la variable `fruit` como la expresión de condición. Go compara el valor de la `fruit` con los `cases` proporcionados así: | ||
|  | 
 | ||
|  | *   fruta == "plátano" (falso) | ||
|  | *   fruta == "manzana" (verdadero) | ||
|  | 
 | ||
|  | Note que el `lemon` no fue probado. Después de que una evaluación devuelve verdadero, no se intentan más casos. | ||
|  | 
 | ||
|  | Como con `if` , puede declarar variables temporales en la expresión de condición del switch: | ||
|  | 
 | ||
|  | ```go | ||
|  | switch fruit := "apple"; fruit {  | ||
|  |     case "banana":  | ||
|  |         fmt.Printf("Yellow and long.")  | ||
|  |     case "apple":  | ||
|  |         fmt.Printf("Red and round.")  | ||
|  |     case "lemon":  | ||
|  |         fmt.Printf("Yellow and round.")  | ||
|  |  }  | ||
|  | ``` | ||
|  | 
 | ||
|  | La `fruit` variable no será accesible fuera de la instrucción switch. | ||
|  | 
 | ||
|  | ## Predeterminado y otros casos
 | ||
|  | 
 | ||
|  | ### Defecto
 | ||
|  | 
 | ||
|  | La palabra clave `default` es el caso alternativo cuando ningún otro caso devuelve verdadero: | ||
|  | 
 | ||
|  | ```go | ||
|  | switch fruit := "grape"; fruit {  | ||
|  |     case "banana":  | ||
|  |         fmt.Printf("Yellow and long.")  | ||
|  |     case "apple":  | ||
|  |         fmt.Printf("Red and round.")  | ||
|  |     case "lemon":  | ||
|  |         fmt.Printf("Yellow and round.")  | ||
|  |     default:  | ||
|  |         fmt.Printf("New fruit: %s!", fruit)  | ||
|  |  }  | ||
|  | ``` | ||
|  | 
 | ||
|  | La salida de este programa sería `New fruit: grape!` . | ||
|  | 
 | ||
|  | ### Misma acción para diferentes valores.
 | ||
|  | 
 | ||
|  | Una lista de valores separados por comas para comparar el valor de expresión de condición con la misma acción. | ||
|  | 
 | ||
|  | ```go | ||
|  | switch fruit := "lemon"; fruit {  | ||
|  |     case "banana", "lemon":  | ||
|  |         fmt.Printf("Yellow fruit.")  | ||
|  |     default:  | ||
|  |         fmt.Printf("This fruit is a color different than yellow.")  | ||
|  |  }  | ||
|  | ``` | ||
|  | 
 | ||
|  | Salida: `Yellow fruit.` . | ||
|  | 
 | ||
|  | ### Sin expresión
 | ||
|  | 
 | ||
|  | Un interruptor sin expresión significa `switch true` . Esta es una versión alternativa a una cadena else-if. | ||
|  | 
 | ||
|  | ```go | ||
|  | fruit := "banana"  | ||
|  |  switch {  | ||
|  |     case fruit == "banana":  | ||
|  |         fmt.Printf("Yellow and long.")  | ||
|  |     default:  | ||
|  |         fmt.Printf("This is not a banana.")  | ||
|  |  }  | ||
|  | ``` | ||
|  | 
 | ||
|  | Esto evalúa `true == (fruit == "banana")` , simpliado a `true == true` , que devuelve true. | ||
|  | 
 | ||
|  | ### Descanso
 | ||
|  | 
 | ||
|  | Puede romper el código en una instrucción de cambio para omitir cualquier otro código. | ||
|  | 
 | ||
|  | ```go | ||
|  | appleColor := "green"  | ||
|  |  switch fruit := "apple"; fruit {  | ||
|  |     case "banana":  | ||
|  |         fmt.Printf("Yellow and long.")  | ||
|  |     case "apple":  | ||
|  |         if appleColor == "green" {  | ||
|  |             fmt.Printf("This apple is green!")  | ||
|  |             break  | ||
|  |         }  | ||
|  |         fmt.Printf("This apple is tasty!")  | ||
|  |     case "lemon":  | ||
|  |         fmt.Printf("Yellow and round.")  | ||
|  |  }  | ||
|  | ``` | ||
|  | 
 | ||
|  | Salida: ¡ `This apple is green!` . | ||
|  | 
 | ||
|  | ### Caer a través
 | ||
|  | 
 | ||
|  | Pase al siguiente caso, si su condición se evalúa como verdadera. | ||
|  | 
 | ||
|  | ```go | ||
|  | switch fruit := "banana"; fruit {  | ||
|  |     case "banana":  | ||
|  |         fmt.Printf("Yellow and long.")  | ||
|  |         fallthrough  | ||
|  |     case "apple":  | ||
|  |         fmt.Printf("Red and round.")  | ||
|  |     case "lemon":  | ||
|  |         fmt.Printf("Yellow and round.")  | ||
|  |  }  | ||
|  | ``` | ||
|  | 
 | ||
|  | Salida: `Yellow and long.` Y `Red and round.` . |