Циклы
Введение
В языке Wave используются циклы для обработки ситуаций, когда код с одинаковой логикой должен выполняться многократно. Циклы используются для выполнения кода, пока выполняется определённое условие, или для выполнения фиксированного числа итераций.
Это позволяет выразить повторяющиеся задачи с помощью краткого и ясного кода, без необходимости дублирования той же логики многократно. Wave поддерживает как условные, так и счётные циклы, предлагая ключевые слова для управления потоком выполнения во время цикла.
В этом разделе объясняется использование циклов while и for, а также ключевых слов break и continue для управления потоком повторений.
Цикл while
Цикл while выполняет блок кода до тех пор, пока предоставленное условие оценивается как истинное (true).
Как только условие становится ложным (false), выполнение цикла немедленно прекращается.
Этот метод подхо дит для случаев, когда количество повторений не очевидно, и цикл должен выполняться до выполнения определенного условия.
Основная структура
Основная структура цикла while в языке Wave выглядит следующим образом.
while (condition) {
// код для повторения
}
Условное вы ражение должно оцениваться как тип bool, и в блоке кода, заключённом в фигурные скобки {}, можно написать одну или более инструкцию.
Пример: вывод от 0 до 4
var i :i32 = 0;
while (i < 5) {
println("я {}.", i);
i = i + 1;
}
В этом примере цикл выполняется, пока переменная i меньше 5.
На каждой итерации выводится текущее значение, и i увеличивается на 1, чтобы в итоге условие стало ложным.
Цикл for
Цикл for подходит для случаев, когда количество повторений относительно ясно.
То позволяет ясно выразить поток исполнения цикла, определив начальное значение, условие и шаг изменения в одной строке.
Поскольку все элементы управления циклом собраны в одном месте, структура цикла легко обозревается.
Основная структура
for (init; condition; step) {
// код для повторения
}
Инициализация цикла for в Wave поддерживает несколько форматов.
- Неявная инициализация типа
var - Инициализация объявления с
var/let mut/const - Обычная инициализация выражения (переиспользование существующей переменной)
Пример 1: неявная инициализация типа
for (i :i32 = 1; i <= 5; i += 1) {
println("i = {}", i);
}
Пример 2: инициализация с var / let mut
for (var i: i32 = 0; i < 3; i += 1) {
println("var i = {}", i);
}
for (let mut j: i32 = 0; j < 3; j += 1) {
println("let mut j = {}", j);
}
Пример 3: инициализация на основе выражения (переиспользование существующей переменной)
var i: i32 = 99;
for (i = 3; i <= 5; i += 1) {
println("i = {}", i);
}
println("after loop: {}", i); // 6
Декларативная инициализация (var, let mut, i :i32 = ...) действует в рамках области видимости цикла, в то время как инициализация на основе выражений (i = ...) обновляет внешнюю переменную.
Вложенные циклы
Циклы могут быть написаны внутри других циклов, это называется вложенными циклами. Вложенные циклы полезны для обхода двумерных структур данных или обработки сочетаний различных условий.
Пример: двойной цикл while
var i :i32 = 0;
while (i < 3) {
var j :i32 = 0;
while (j < 2) {
println("i={}, j={}", i, j);
j = j + 1;
}
i = i + 1;
}
В этом примере каждый раз, когда выполняется внешний цикл while, внутренний цикл while выполняется полностью.
Это позволяет последовательно обрабатывать комбинации в формате (while, while).
Оператор break
Оператор break немедленно завершает цикл и перемещает поток за пределы этого цикла.
Используется, когда необходимость в выполнении повторения отпадает.
Пример: завершение цикла при определенном значении
var i :i32 = 0;
while (true) {
if (i == 5) {
break;
}
println(i);
i = i + 1;
}
В этом примере, когда i достигает 5 в бесконечном цикле, выполняется break, завершающий цикл.
Таким образом, оператор break полезен, когда нужно управлять повторением вне зависимости от условия цикла.
Оператор continue
Оператор continue пропускает оставшуюся часть текущего повторения и сразу переходит к следующему.
Используется для пропуска определенной логики при выполнении конкретного условия.
Пример: вывод только четных чисел
for (var i: i32 = 0; i <= 10; i = i + 1) {
if (i % 2 == 1) {
continue;
}
println(i);
}
В этом коде, если i нечетное, continue выполняется и пропускает часть вывода.
В результате выводятся только четные значения.
Резюме
Циклы в Wave разработаны для естественного представления как условных, так и количественных повторений.
Цикл while подходит для условных повторений, а for полезен, когда количество повторений и поток очевидны.
Совместное использование break и continue позволяет точно управлять потоком выполнения во время повторений, делая логику более точной и гибкой.
