🐹 Go

Условия (if/else/switch) в Go 1.21: подробное руководство

Условия в программировании на Go (if/else/switch)

Что такое условия и зачем они нужны?

Представь, что ты — капитан космического корабля. Твоему кораблю нужно принимать решения: "Если впереди астероид — облететь. Если топливо заканчивается — лететь на ближайшую заправку."

В программировании условия позволяют программе принимать решения. Программа смотрит на данные и выбирает, что делать дальше. Без условий программа просто выполняла бы команды одну за другой, не реагируя на ситуацию.

В языке Go есть два основных способа проверять условия: if/else и switch.

Основной синтаксис if/else

Конструкция if проверяет условие. Если оно истинно (правда) — выполняется один блок кода, если ложно — другой.

if условие {
    // код, если условие правда
} else {
    // код, если условие ложь
}

Пример — программа "Что больше":

package main

import "fmt"

func main() {
    var a, b int
    fmt.Print("Введите первое число: ")
    fmt.Scan(&a)
    fmt.Print("Введите второе число: ")
    fmt.Scan(&b)

    if a > b {
        fmt.Println(a, "больше, чем", b)
    } else if b > a {
        fmt.Println(b, "больше, чем", a)
    } else {
        fmt.Println("Числа равны")
    }
}

Как это работает? Программа просит ввести два числа. Затем проверяет: если первое больше второго — выводит одно сообщение, если второе больше первого — другое, иначе (если равны) — третье.

Проверка нескольких условий: else if

Когда нужно проверить больше двух вариантов, используют else if. Пример — программа "Парк аттракционов":

package main

import "fmt"

func main() {
    var age int
    fmt.Print("Сколько вам лет? ")
    fmt.Scan(&age)

    if age < 5 {
        fmt.Println("Идите в зону для малышей (0-4 года)")
    } else if age < 12 {
        fmt.Println("Идите в детскую зону (5-11 лет)")
    } else if age < 18 {
        fmt.Println("Идите в подростковую зону (12-17 лет)")
    } else {
        fmt.Println("Идите во взрослую зону (18+)")
    }
}

Обрати внимание: мы проверяем age < 5, потом age < 12. Если возраст 7, то первое условие ложно (7 не меньше 5), а второе истинно (7 меньше 12). Go проверяет условия по порядку и останавливается на первом истинном.

Логические операторы: && (И), || (ИЛИ), ! (НЕ)

Иногда нужно проверить сразу несколько условий:

  • && — "И". Оба условия должны быть правдой.
  • || — "ИЛИ". Хотя бы одно условие должно быть правдой.
  • ! — "НЕ". Переворачивает условие.

Пример — программа "Магазин сладостей":

package main

import "fmt"

func main() {
    var summa int
    fmt.Print("Введите сумму покупки: ")
    fmt.Scan(&summa)

    if summa > 1000 {
        fmt.Println("Скидка 20%! Ваша цена:", summa*80/100)
    } else if summa > 500 && summa <= 1000 {
        fmt.Println("Скидка 10%! Ваша цена:", summa*90/100)
    } else {
        fmt.Println("Скидки нет. Цена:", summa)
    }
}

Здесь summa > 500 && summa <= 1000 означает: "сумма больше 500 И меньше или равна 1000".

Конструкция switch — удобная замена длинных if/else

Когда нужно проверить одну переменную на много разных значений, switch делает код чище и понятнее.

switch переменная {
case значение1:
    // код
case значение2:
    // код
default:
    // код, если ни одно не подошло
}

Пример — программа "Путешествие в горы":

package main

import "fmt"

func main() {
    var height int
    fmt.Print("Введите высоту участка (метры): ")
    fmt.Scan(&height)

    var slozhnost string
    switch {
    case height < 500:
        slozhnost = "лёгкий"
    case height < 1500:
        slozhnost = "средний"
    case height < 3000:
        slozhnost = "сложный"
    default:
        slozhnost = "экстремальный"
    }

    fmt.Println("Уровень сложности:", slozhnost)
}

В Go можно использовать switch без переменной — тогда в case пишутся условия, как в примере выше. Это удобно, когда условия сложные.

Проверка чётности числа

Оператор % (остаток от деления) помогает определить чётность. Если число делится на 2 без остатка — оно чётное.

package main

import "fmt"

func main() {
    var chislo int
    fmt.Print("Введите число: ")
    fmt.Scan(&chislo)

    if chislo%2 == 0 {
        fmt.Println(chislo, "— чётное число")
    } else {
        fmt.Println(chislo, "— нечётное число")
    }
}

Частые ошибки новичков

  • Забывают фигурные скобки. В Go скобки обязательны даже для одной строки. Нельзя писать if x > 5 fmt.Println("ok") — это ошибка.
  • Путают = и ==. Один знак = это присваивание, два == это сравнение. if x = 5 — ошибка компиляции.
  • Лишняя точка с запятой после условия. if x > 5; { ... } — так нельзя.
  • Забывают про else. Если нужно обработать оба варианта, else обязателен. Иначе программа просто ничего не сделает, когда условие ложно.
  • Сложные вложенные if. Старайся не писать if внутри if внутри if. Используй else if или switch.

Итоговый пример: решение задачи "Магазин сладостей"

Давай решим задачу целиком. Условие: если сумма покупки строго больше 1000 рублей — скидка 20%, если от 500 до 1000 (включительно) — скидка 10%, иначе скидки нет.

package main

import "fmt"

func main() {
    var summa int
    fmt.Print("Введите сумму покупки: ")
    fmt.Scan(&summa)

    var skidka int
    var itogovayaSumma int

    if summa > 1000 {
        skidka = 20
    } else if summa >= 500 {
        skidka = 10
    } else {
        skidka = 0
    }

    itogovayaSumma = summa * (100 - skidka) / 100

    fmt.Println("Скидка:", skidka, "%")
    fmt.Println("Итоговая сумма:", itogovayaSumma, "рублей")
}

Разбор решения:

1. Просим пользователя ввести сумму.

2. Проверяем условия по порядку: сначала >1000, потом >=500, потом всё остальное.

3. Вычисляем итоговую сумму с учётом скидки.

4. Выводим результат.

Попробуй запустить программу с разными числами: 300 (скидки нет), 750 (скидка 10%), 1500 (скидка 20%).

Условия — это основа любого осмысленного кода. Тренируйся, и скоро ты сможешь писать программы, которые реагируют на любые ситуации!