Перейти к содержанию

Условия

Условия — это первая «развилка» в программе. Ты учишь компьютер выбирать между вариантами: правильный логин или нет, оценка отличная или средняя, светофор красный или зелёный.

Что должен понять

  • Как пишется 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.

Дальше: Циклы.