Урок 7. Циклы

Урок 7. Циклы

E-code
Болтовня ничего не стоит. Покажите мне код. Linus Torvalds


Каждый наш день частично может напоминать "день сурка": мы просыпаемся, идём на работу или учёбу, приходим обратно и в кроватку. И так до выходных. Так кто сказал, что день программы отличается от дня человека? Для себя сегодня мы изменим привычный ход событий и посмотрим на "день сурка" программы, а именно - на циклы.


Циклы

День начинающего программиста простым не назовёшь, то нужно выводить данные в консоль, то вводить, то создавать под это всё переменные и так далее. Предположим, что наш программист - собачник. И вот он решил посчитать своих собак. И что теперь, сидеть и для каждой из них писать println-ы? За деньги да, а так, конечно нет. На помощь утопающему приходят циклы. Рассмотрим на примере цикла for.


Цикл for

Выполним задачу нашего программиста за него. Цикл разделён на условие и блок выполнения (тело цикла).

6 предполагаемых строчек превратились в 2. Магия!


Поскольку у нас в теле только одна операция двойные скобки {} можно опустить. Посмотрим на итог.

Ну хоть не 20


Разберём написанное. for - ключевое слово, обозначение нашего цикла. Внутри скобок указано наше условие, где i - просто переменная-счётчик (она-то и принимает значения 1,2,3,4,5), in - ключевое слово, принимающее описанный дальше диапазон 1..5.

Сначала i=1, затем она выводится на экран с помощью println, дальше i=2 и она снова выводится на экран. После вывода на экран числа 5 условие цикла выполнилось полностью и программа закончила выполнение цикла.

Таким образом можно сделать вывод, что

Цикл - блок кода, который выполняется повторно несколько раз в зависимости от условия.

Стоит обязательно оговориться, что i - val-переменная цикла for, то есть в теле цикла её изменить не получится.

Собачки хотят кушать, но не все, каждая вторая не хочет, да и кормёжка происходит в обратном порядке. А ещё желательно посчитать сколько питомцев покормил наш программист. Как же быть? Мы не оставим собачек в беде. Для наших целей понадобятся ключевые слова downTo, step и новая переменная.

Меня бы кто покормил

Аналогично условным конструкциям для выполнения нескольких действий тело облачается в двойные скобки {}. downTo помогает сформировать наш интервал, который идёт по нисходящей (как моя самооценка), step (шаг) - "перескакивать" ненужные по условию выше значения.

А что в итоге?

Аж от сердца отлегло. Никто не голоден, кроме меня


Также можно использовать команду repeat() для заданного числа повторений.

И чем вам не цикл?
Такое трудно забыть


Цикл forEach

Для массивов и коллекций (об этом мы поговорим позже) существует цикл forEach. Его можно применять для каждого элемента последовательности.

Экономится довольно много текста

В данном цикле мы выводим на экран каждый элемент массива последовательно.

Элементы выводятся последовательно



Цикл while

Циклы for и forEach хороши, если нужно выполнять код для каждого элемента последовательности. Цикл while хорош, если нам нужно обратить внимание не на саму последовательность, а на само условие цикла. Чтобы всё это понять, нам помогут котлетки.

Не зря собак кормили


Дословно получается: пока kotletki больше 0 мы будем выводить наше сообщение, как только оно стало равным 0 (условие, что у нас есть котлеты, не соблюдается и становится ложным), наш цикл завершился. Обязательно нужно убавлять значение, иначе наш цикл не закончится.

Мы точно съели три котлеты?

Точно. Ни один пёс не пострадал


Цикл do-while

Представим ситуацию, что после работы или учёбы вам надо покормить кота. Собаки кончились.

Шучу


Это обязательное условие, вы должны покормить кота хотя бы 1 раз (и так бы поступил на вашем месте каждый), то есть выполнит, как минимум, одну итерацию . Разработчики Kotlin это предусмотрели и решили сделать ещё один вид цикла do-while.

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

Он выполнится хотя бы 1 раз в любом случае, даже если начальное условие не будет соответствовать истинности. Тело цикла переносится в блок do.

Теперь понятно почему коты всегда голодные
Кто не верил, оно выполнилось



Операторы break и continue

Вот бы всегда можно было кормить кота несуществующей котлетой. Проблема циклов в другом. Мы можем накормить кота хоть тысячами котлетами, но котику вредно так много кушать, поэтому мы можем ограничить их поток для кота благодаря ключевому слову break. Оно сделает так, что наш цикл завершится досрочно. Кроме того, нашему котику нужно запивать! Ключевое слово continue продолжает перебор цикла, пропуская ту часть тела цикла, что идёт после данного ключевого слова. Мы можем реализовать это всё в одном цикле.


На корме разориться можно!

Посмотрим сразу итог.

Он всё-таки съел 2-ю котлету!


Continue пропустил остальную часть тела цикла, но стоит держать в голове, что кот съел вторую котлету (skyshano было равно 2-м по условию, а если бы мы написали skyshano после блока "запивания", то кот пил бы вечно, то есть был бы создан бесконечный цикл, потому что часть кода с прибавлением переменной просто бы всегда пропускалась continue). Break не просто пропустил часть кода, когда количество съеденных котлет достигло 5, но и полностью завершил цикл, хотя у нас в тот момент было ещё много котлет.

"Я вам запрещаю продолжать цикл" - оператор break


Вложенные циклы и массивы

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

Привет из нулевых


Наш вывод в консоли.

Вот и сказочке конец, кто прочёл, тот - молодец


Программа выполняет код главного (верхнего) цикла, достигает вложенного цикла (тот, что внутри), выполняет код вложенного, и после этого продолжается выполнение главного цикла. Цикл завершится, когда выполнится главный цикл.

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

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

Циклы творят чудеса

Посмотрим на вывод. Главный цикл "перебирает" сами массивы внутри массива, а внутренний цикл - значения этих массивов.

Получился неплохой пример матрицы (не кино)




Что дальше?

Далее мы познакомимся с функциями. Без них не обходится ни одна серьёзная программа, потому и ценность следующей статьи возрастает в разы.



Дорогой читатель, надеюсь моя статья оказалась полезной для тебя!

Ты всегда можешь следить за нашим творчеством на этом канале.

Спасибо за проявленный интерес!





Report Page