freeCodeCamp/guide/russian/go/switch/index.md

134 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Switch in Go
localeTitle: Включить Go
---
# Включить Go
Оператор переключения Go является альтернативой `if` . Он использует следующий синтаксис:
```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.")
}
```
Выход этой программы будет `Red and round.` ,
Сначала мы объявляем переменную `fruit` как `apple` . Затем мы используем переменную `fruit` как выражение условия. Go сравнивает ценность `fruit` с такими `cases` как:
* плод == "банан" (ложный)
* фрукты == "яблоко" (правда)
Уведомление о `lemon` не было проверено. После того, как оценка вернётся, больше не рассматриваются случаи.
Как и в `if` , вы можете объявлять временные переменные в выражении условия 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.")
}
```
Переменные `fruit` не будут доступны за пределами оператора switch.
## Стандартные и другие случаи
### По умолчанию
Ключевое слово по `default` - это случай падения, когда другие случаи не возвращают true:
```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)
}
```
Результатом этой программы будет `New fruit: grape!` ,
### То же действие для разных значений
Список значений, разделенных запятыми, для сравнения значения выражения условия с тем же действием.
```go
switch fruit := "lemon"; fruit {
case "banana", "lemon":
fmt.Printf("Yellow fruit.")
default:
fmt.Printf("This fruit is a color different than yellow.")
}
```
Выход: `Yellow fruit.` ,
### Без выражения
Переключатель без выражения означает, что значение `switch true` . Это альтернативная версия в цепочке else-if.
```go
fruit := "banana"
switch {
case fruit == "banana":
fmt.Printf("Yellow and long.")
default:
fmt.Printf("This is not a banana.")
}
```
Это оценивает значение `true == (fruit == "banana")` , упрощенное к `true == true` , которое возвращает true.
### Перерыв
Вы можете сломать код в инструкции switch, чтобы пропустить код.
```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.")
}
```
Выход: `This apple is green!` ,
### Провалиться
Переходите к следующему случаю, оценивает ли его условие значение true.
```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.")
}
```
Выход: `Yellow and long.` И `Red and round.` ,