Раздел 41 · Zig с нуля

Условия, циклы и блоки

junior~10 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Условия, циклы и блоки

Ты раскладываешь посылки по двум полкам: тяжёлые ниже, лёгкие выше. Для каждой коробки повторяется один шаг, но решение зависит от веса. В программе цикл отвечает за повторение, условие за выбор. Если смешать эти роли, легко отправить все коробки на одну полку.

Посчитаем сумму только чётных чисел. Наш список небольшой, поэтому сможем проверить весь путь вручную, без догадок о том, что произошло внутри цикла.

Одна мысль урока

Условие выбирает путь, цикл повторяет шаг, блок ограничивает локальные имена.

Опора из прошлого урока: Числовые типы и арифметика.

От картинки к записи

if проверяет логическое значение bool, которое бывает true или false. Число не превращается в условие автоматически. Для проверки чётности записываем value % 2 == 0: остаток от деления на два равен нулю. Двойной знак равенства сравнивает, одинарный присваивает. Эти действия нельзя переставлять ради сходства с математической записью.

Цикл

for подходит для последовательности, у которой уже есть элементы. В записи for (values) |value| имя между вертикальными чертами обозначает очередной элемент. Оно локальное: после завершения цикла использовать его нельзя. Результат вычисления складываем в отдельное имя total, созданное до цикла.

while подходит, когда повторение определяется условием. Например, «пока осталось больше нуля». Оно требует внимательности: условие должно когда-нибудь стать ложным, иначе получится бесконечное повторение. Изменение счётчика можно писать в теле или в продолжении while (condition) : (update). Мы не используем оба способа одновременно для одного счётчика, чтобы не перескочить значение.

Блок

помогает разделить этапы. Значение, объявленное внутри блока, не становится глобальным. Это уменьшает число имён, которые видны в каждой строке. Пустые фигурные скобки не означают массив; значение записи зависит от места в выражении.

Условия могут быть выражениями. const label = if (count == 0) "empty" else "ready"; выбирает одно значение и сразу привязывает его к имени. Здесь обе ветки должны дать совместимый результат. Это полезнее изменяемой переменной, которую сначала объявляют без значения, а потом присваивают в разных ветках.

break заканчивает ближайший цикл, continue пропускает остаток текущей итерации. Для первой задачи они не нужны, но полезно понимать их направление. Если внутри одного цикла есть другой, обычный break не завершает оба. Не добавляй ранний выход, пока не можешь назвать, какие элементы останутся необработанными.

Пустая последовательность важна: тело for не выполнится ни разу, и начальный total останется нулём. Такой результат следует из построения функции, а не из специальной обработки пустого входа. Начальное значение аккумулятора, переменной накопления, должно соответствовать операции: для суммы это ноль, для произведения обычно единица.

премиум-урок

Продолжение в премиуме: 1 200 ₽ в месяц или 10 000 ₽ в год. Вместе с ним серверные проверки задач и школьные токены AI-коуча.

Оплата пока не подключена: премиум и курсы открываются промокодом.