Условия¶
Условия — это первая «развилка» в программе. Ты учишь компьютер выбирать между вариантами: правильный логин или нет, оценка отличная или средняя, светофор красный или зелёный.
Что должен понять¶
- Как пишется
if,else if,else. - Что в
ifнет скобок вокруг условия, но фигурные обязательны. - Как использовать инициализатор:
if v := f(); v > 0 {}. - Когда
switchлучше длинной цепочкиif. - Что такое type switch (на интуитивном уровне).
if / else¶
package main
import "fmt"
func main() {
n := 7
if n%2 == 0 {
fmt.Println("чётное")
} else {
fmt.Println("нечётное")
}
}
Несколько условий:
score := 78
if score >= 90 {
fmt.Println("отлично")
} else if score >= 70 {
fmt.Println("хорошо")
} else if score >= 50 {
fmt.Println("удовлетворительно")
} else {
fmt.Println("пересдача")
}
switch¶
switch короче и читается лучше, когда сравнений много:
color := "red"
switch color {
case "red":
fmt.Println("стой")
case "yellow":
fmt.Println("приготовься")
case "green":
fmt.Println("езжай")
default:
fmt.Println("неизвестный сигнал")
}
switch без выражения работает как цепочка if:
switch {
case score >= 90:
fmt.Println("отлично")
case score >= 70:
fmt.Println("хорошо")
default:
fmt.Println("ниже среднего")
}
Type switch (коротко)¶
Когда у тебя есть interface{} (или any) и нужно понять, что внутри:
func describe(x any) {
switch v := x.(type) {
case int:
fmt.Println("int:", v)
case string:
fmt.Println("string:", v)
default:
fmt.Println("что-то другое")
}
}
Подробно про интерфейсы — в Sprint 1. Здесь достаточно увидеть синтаксис.
Типичные ошибки¶
- Скобки вокруг условия, как в C:
if (x > 0). Лишние. - Забыли
else if, написали два независимыхif— оба сработают. - Внутри
caseне нуженbreak— Go сам не проваливается.
Критерии приёмки модуля¶
- Программа определяет чётность числа через
if. - Программа реализует светофор через
switchс тремя состояниями. - Программа классифицирует оценку (отлично / хорошо / средне / пересдача).
- Везде используется ранний возврат вместо глубокой вложенности
if.
Дальше: Циклы.