Итерация (от лат. iteratio) – это единичное повторение того или иного действия. Этот термин является важной составляющей программирования и применяется относительно циклов, исполняющихся в процессе работы программы несколько раз. Суть: цикл выполнился единожды, значит, прошла одна итерация. Также существуют другие варианты этого определения в зависимости от контекста. Например, при организации разработки ПО по методике Agile «итерация» – это отрезок рабочего процесса длиной в 2-3 недели (в Scrum то же самое понятие называют «спринт»).

Пример, как функционирует итерация

Как используются итерации в программировании

Специфика создания и работы итераций

Что означает «итерируемый объект»

Итерация и итератор – не перепутайте

Как может работать итерация при проходах по объекту

В чем преимущества итераций при разработке

Итерации используют мало памяти

Итерации облегчают оптимизацию

Итерации отвечают за автоматизацию

Примеры задач, которые решаются итеративно

В чем отличия итерации от рекурсии

Пример, как функционирует итерация

В зависимости от своей задачи циклы могут работать по-разному. В некоторых случаях они проходят заранее заданное количество итераций и останавливаются. В других – остановка происходит по достижении определенного результата (например, верно/неверно). Число итераций тоже зависит от конкретной программы, их может быть как бесконечное количество, так и ноль.

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

Представьте случайное число X, которое нужно умножить на 15, чтобы добиться результата, равного 200 или больше (это точка, после которой циклы перестанут повторяться). Программа будет проверять соответствие условию, умножать, снова проверять соответствие и повторять эти действия, пока не добьется заданного результата. Количество итераций напрямую зависит от того, какое значение было у X. Если это было 8, то программе потребуется 2 цикла, чтобы получить 240, что соответствует условию. При этом, если X будет равен 201, то цикл не выполнится, потому что результат уже достигнут без умножений.

Как используются итерации в программировании

Процесс разработки часто требует решения задач, в которых для достижения цели необходимо повторить одно и то же действие несколько раз. Это могут быть разные вещи: получение информации, вывод сообщения, отправка оповещения и пр. В программировании работает важный принцип DRY, который расшифровывается так don’t repeat yourself – «не повторяйся». В соответствии с этим «законом» не стоит вручную выполнять все описанные выше действия. Поэтому их лучше делегировать написанному разработчиком циклу, который сделает необходимое число итераций вплоть до достижения результата.

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

  • Контролируемые подсчетом. Разработчик может заставить цикл исполниться, например, 10 раз подряд – именно это будет условием, чтобы перестали запускаться последовательные итерации. Как правило, такие итерации применяют для ввода операторов for. В этом случае разработчик обозначает стартовую точку итерации и задает число повторений.
  • Условные. Разработчик может установить условием выполнения не количество повторений, а некий конкретный итог. Как в примере выше, это может быть достижение определенного числа или получение информации от конкретного источника. Программа будет проверять исполнение условия в начале или по окончании каждой итерации (зависит от того, как задаст программист). Если результат будет достигнут, цикл прекратится. При этом специалисту не придется делать что-либо вручную. Такой подход практикуется при машинном обучении.

Итерации встречаются практически во всех распространенных языках программирования. Ими пользуются программисты на C++, PHP, JavaScript, Python и многих других.

Специфика создания и работы итераций

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

Объявление цикла. Программист описывает условия для выполнения цикла перед тем, как объявить его, то есть указывает, в каком случае работа будет считаться выполненной. Это может быть число итераций или другие события. Этот процесс – объявление цикла с предусловием.

Цикл с предусловием выглядит примерно так:

Итерация

В некоторых случаях исполнение программы сразу запускает цикл и сверяется со своей целью только после завершения итерации – это цикл с постусловием.

Схема цикла с постусловием:

Итерация

Написание тела цикла. После объявления программист должен написать тело – то, что непосредственно будет делать цикл, какие именно итерации будут выполняться. Это подпрограмма, поэтому для ее отделения от основного кода используются {} или слова begin и end. Если программист использует Python, то для этих целей он применяет отступы.

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

Разные варианты входа в цикл. Существуют разные варианты того, как будет работать подпрограмма в рамках основного кода. Условия могут проверяться до входа в тело, еще на этапе объявления цикла. Тогда ничего не запускается. В противном случае программа сразу входит в тело цикла и проверяет, соответствует ли выполнение кода условию, только после первой итерации. Получается, если результат соответствует условиям, цикл выполнится либо 0 раз, либо 1 раз.

Что означает «итерируемый объект»

Итерируемые объекты – те, чье содержимое поддается пересчету. Наиболее примитивный пример итерируемого объекта – строка, потому что в рамках цикла ее возможно пройти от начала до конца побуквенно (количество символов в ней измеримо, и у каждого из них есть строго заданное место).

Чуть более сложный пример подобных объектов – массив. Он представляет собой переменную, внутри которой перечислены значения, имеющие порядковый номер. Поскольку структура массива сходна с числовым рядом, ее тоже можно пересчитать. Для этого можно двигаться в направлении от первого объекта к последнему и наоборот.

Итерируемые объекты тесно связаны с понятием итерируемости, которое встречается во многих современных языках программирования (например, JavaScript). Необходимость обрабатывать подобные объекты часто возникает при парсинге, анализе строк или прочих данных. Понятие итерируемости важно с точки зрения того, можно ли обработать объект, изучить его содержимое.

Итерация и итератор – не перепутайте

Итератор – это похожее по звучанию понятие, которое представляет собой переменную-счетчик. Она предназначена для записи количества итераций цикла. Как правило, итераторы прописывают для циклов, которые должны выполняться определенное количество раз.

Принцип работы итератора. Работу счетчиков в их простом варианте можно описать так: значение увеличивается на единицу, как только заканчивается каждая итерация. Цикл завершится в момент, когда в итераторе будет достигнут определенный порог (целевое число повторений). Программа начинает отсчитывать с 0, но иногда – с 1. В теле цикла прописывается значение итератора, которое можно в процессе выполнения подпрограммы сравнивать с какими-либо другими показателями или прибавлять к ним. При этом изменение самого итератора обычно приводит к тому, что цикл перестает работать, итерации перестают повторяться.

Изменение функционирования алгоритма. Многие языки программирования позволяют задавать итератору другое поведение. Это значит, что алгоритм будет прибавлять к значению не 1, а, например, 2 или отнимать 1 при каждом завершении итерации вплоть до достижения 0. Необходимость в таком изменении встречается редко, обычно к нему не прибегают без острой необходимости.

Как может работать итерация при проходах по объекту

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

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

Пример: цикл предполагает проход по строке со словом «тетрадь». Итераций в итоге будет 7. Сначала итератор примет значение «т», затем «е» и так далее вплоть до «ь». Как только строка закончится, цикл завершится.

Подобный формат работы итератора удобен, когда нужно взаимодействовать с отдельными элементами, находящимися в более крупных единицах. В массиве может быть большое количество строк, каждую из которых нужно обработать отдельно. Именно для решения таких задач используется проход в рамках цикла. Обратите внимание, что возможность так делать есть только при работе с итерируемыми объектами.

В чем преимущества итераций при разработке

Повторения в программировании – распространенное явление, которое пользуется популярностью по нескольким причинам.

Итерации используют мало памяти

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

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

Итерации облегчают оптимизацию

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

Итерации отвечают за автоматизацию

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

Примеры задач, которые решаются итеративно

Существует набор задач, которые традиционно решаются с применением итераций. Перечислим некоторые из них.

Циклический подсчет. Это может быть операция с математическими выражениями. Так, итерации помогают вычислять факториал или конкретное число Фибоначчи. Для решения подобных задач подходит и рекурсивный метод, но он требует несравнимо больше ресурсов.

Перебор. Для этого примера рассмотрим упрощенную схему: сервер предоставил объемный массив строк, каждая из которых представляет информацию о продукте с сайта интернет-магазина. Для выполнения некой задачи нужно найти в этих строках определенный повторяющийся элемент и перенести его в другое место. Чтобы достичь этой цели, можно использовать итеративный алгоритм, для этого есть все необходимые условия: массив – итерируемый объект, все его элементы пронумерованы, обойти их можно с помощью цикла.

Подсчет времени до выполнения условия. Простой пример: имеется статистика по приросту пользователей на сайте (A), нужно выяснить, через какой промежуток времени аудитория достигнет определенного значения (B) при таких же темпах увеличения. В этом случае разработчик не знает, сколько итераций потребуется, поэтому пишет цикл с незаданным числом повторений. Он выполняется раз за разом, пока верно или неверно условие (достигнуто или не достигнуто значение B), в это же время итератор с каждым шагом увеличивается на 1, отражая месяцы. Останется написать код так, чтобы программа после остановки цикла выдавала показатель счетчика – это и будет требуемый промежуток времени.

В чем отличия итерации от рекурсии

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

  • подпрограмма в итеративном подходе вызывается, завершается и вызывается снова несколько раз, при этом запускается она извне;
  • подпрограмма в рекурсивном подходе вызывает сама себя и позволяет таким образом запускать сразу несколько вложенных друг в друга подпрограмм.

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

Эта статья и другие полезные ресурсы click.ru — после бесплатной регистрации

Вы получите доступ к функционалу экосистемы:

  • Все рекламные площадки в одном окне
  • Мастер маркировки любой рекламы
  • Профессиональные инструменты для решения рутинных задач (дашборды, защита от скликивания и многое другое)
  • Возврат до 16% на контекстную и таргетированную рекламу
  • Бесплатный доступ в платные маркетинговые сервисы
Эта статья и другие полезные ресурсы click.ru – после бесплатной регистрации