JavaScript циклы: for, while, do-while

JavaScript циклыИстория образования современного синтаксиса языка программирования в чем-то походит на историю образования Вселенной. Ведь нужно разобраться, что и как было вначале… Теперь все довольно просто и доступно. В конечном итоге алгоритм всегда представляет собой последовательную цепочку команд. Параллельность в программировании обеспечивается совокупностью каких-то скомбинированных последовательностей. Циклический алгоритм никогда не был практичнее, чем последовательная или параллельная цепочка команд. Переходы, метки, условия – этого всего было достаточно для любого решения. С приходом функциональных языков эта идея была лишена значимости, однако необходимость повторения участков кода осталась.

Браузер: DOM, его язык и сервер

Циклы на JavaScript остались, хотя функциональные идеи обрели особый смысл. Возможно, осталось что-то от «Пролога» или «Лиспа», однако, скорее всего, область, в которой обитает JavaScript привела к тому, что есть. Есть сомнения относительно того, что это последнее решение. Работает JavaScript внутри браузера, который получает страницу, разбирает ее в DOM и запускает первый скрипт. Все остальные страницы – это дело рук разработчика, который манипулирует языком, посредством которого может вызываться код на сервер. Результат может быть получен при помощи механизма AJAX. Браузер исполняет код JavaScript, который может использоваться объектами браузера, в том числе и тем, который обеспечивает передачу информации на сервер и получение ответа, в качестве которого может выступать HTML-разметка, стили и код. Ответ может быть представлен в виде объектов и массивов. Теряется смысл использовать циклы на JavaScript, поскольку существует много возможностей обойтись без них, а рисковать повесить браузер бесконечной последовательностью команд никто не хочет. Сами циклы присутствуют в большей части конструкций на языке JavaScript. Разработчик вполне может дополнить собственными функциями стандартные конструкции.

JavaScript в пространстве кода

Современные программисты сегодня даже не задумываются о том, что используемые ими циклы (while, for, dowhile) в конечном итоге представляют собой серию циклов процессора, простую последовательность двоичных операций, прерываемую проверками счетчиков, или говоря иначе, условиями. Цикла как такового на уровне машинного языка нет. Имеется комбинация обычных команд, условных переходов и условных операций. Какое бы средство ни было использовано для разработки браузера или интерпретатора JavaScript, уровнем выше будут циклы. Различные куски кода могут быть представлены различными временами и разными поколениями программистов. Еще одним этажом выше находится «здание» JavaScript. Его синтаксис предлагает современные циклы JavaScript. Нужно отметить, что JavaScript представляет собой прекрасный язык: он полнофункциональный, современный и практичный. Его синтаксис включает в себя все конструкции, которые уже успели пройти проверку временем и стали основой любой алгоритма. На самом ли деле они необходимы? Прогресс в программировании довольно часто задавал вопросы фундаментального характера, и только в ряде случаев находил решение.

Встречается два варианта циклов: по счетчику и по условию. По сути любой цикл на самом низком уровне является циклом по условию. В некоторых языках программирования встречается цикл «по каждому». Циклы foreach на JavaScript представлены конструкцией propinobject.Однако можно использовать и вариант array.forEach (…). В любом случае существует два варианта. Машинный код, который в конечном итоге выполняет все алгоритмы программиста, не имеет никаких иных вариантов повтора последовательности команд. Он может что-то выполнить еще раз, пока счетчик считает, что условие выполняется. С этой точки зрения JavaScript представляет собой типичный интерпретатор. Его особенность состоит в том, что он функционирует внутри браузера, использует его объекты и дает возможность исполнять алгоритмы на стороне клиента при загрузке страницы в браузер и в процессе ее работы.

Простой цикл

Циклы foreach на javaScript выглядят как применение к массиву функции. Использование таких циклов не вызывает особых сложностей. Формально никакого цикла здесь как такового и нет. Есть только последовательное обращение функции к различным элементам массива.

Цикл по счетчику

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

Условные циклы

В JavaScript можно использовать такой вариант, как while в зависимости от того, когда нужно применять условие. Если тело цикла может быть ни разу не исполнено, это одно, а если тело должно быть исполнено хотя бы раз, то это уже совершенно другое. В первом случае, при интерпретации конструкции whileJavaScript будет проверять условие, и если оно истинно, выполнять цикл. Во втором случае будет сперва исполнен цикл. Если в результате изменения переменных, которые указаны в конструкции dowhile, оно примет ложное значение, процесс выполнения скрипта будет прерван.

Комбинации простых алгоритмов

Основной задачей любой алгоритма является найти и принять решение относительно того, как быть дальше. Самым примитивным вариантом поиска является обращение к переменной. Результат получается непосредственно. Если переменных много, или у нее целый массив значений, то для выборки значения требуется найти то, которое определяет дальнейшее поведение скрипта. Эта простая доктрина сделала в языке JavaScript цикл со счетчиком своеобразной панацеей от всех проблем. Одной из характеристик современных персональных компьютеров является быстрота. В браузере достаточно времени для выполнения скриптов, так что спешить некуда. Перебрать что-то ради чего-то довольно просто. Таким образом, циклы for обрели большую популярность на JavaScript. В этом нет ничего плохого. Однако за подобным подходом легко теряется вся сущность, ради которой был написан тот или иной алгоритм. Данные не могут быть беспредметными. Любая программа всегда пишется ради чего-то. При чрезмерном употреблении на JavaScript циклов for, разработчик рискует не разглядеть нужную сущность и не создать адекватный алгоритм.

Функциональность кода как отображение реальности

При использовании циклов JavaScript можно представить примеры однотипного кода функциями. В результате алгоритм сразу преображается. Основное тело скрипта уменьшается в размере и становится более понятным и читаемым. Это, конечно, трудно назвать кардинально новым решением, однако по сути своей это не выход за рамки других конструкций языка. Так, например, в частности, циклы JavaScript можно обнаружить в классической функции split (): varcResult = ‘9, 8, 7, 6, 5, 4’; varaResult = cResultsplit (‘,’). Никакого цикла здесь нет, но как же иначе выполняется данная функция, если не путем поиска символа ‘.’ и его использования для отделения одного числа от другого. Если абстрагироваться от того, каким образом это реализуется внутри функции split (), то можно дополнить своим функционалом, более удобным с точки зрения использования. Такой подход приводит к разработке соответствующего набора функций для каждой задачи, однако общее при таком подходе все же будет. Это функции padc(), allt(), pad() иpadr(), которых нет в JavaScript. Иногда необходимо убрать из строки пробелы или выровнять длину строки справа, слева или с обеих сторон. В теле таких функций присутствуют циклы JavaScript. Все просто и доступно, и алгоритм, использующий их, никогда не повиснет. Можно заметить, что функции преобразования из 16-ричной системы в 10-ричную и обратно выполнены здесь посредством использования циклов dowhile. Это довольно компактный и эффективный синтаксис языка.

Правильные циклы

Язык JavaScript не чета другим языкам программирования. Он не отличается большим количеством версий. Все стремления здесь направлены на развитие и расширение синтаксиса. Мышление программиста, который использует JavaScript, отличается от мышления программиста, использующего PHP, когда язык не ограничен переменными, массивами, оператора присваивания и циклами. Если представить, что циклов вообще нет, а задачу как-то надо решать, то самым простым вариантом будет предположить, что программа  обрабатывает данные, которые представляют собой точку или систему точек в пространстве информации. Что собой представляет эта точка или система точек зависит от конкретной предметной области. Для программиста этот тезис обозначает следующее: есть простые данные, и есть совокупность простых данных. Простое данное одного уровня для уровня ниже будет системой, а для уровня выше – точкой. Забота точки при таком подходе заключается в проявлении своей сущности через свои методы. Когда речь идет о точке в надсистеме, функция системы заключается в проявлении своей сущности как совокупности сущностей входящих в нее точек. Такой подход является далеко не новым, однако он до сих пор не нашел адекватного отражения  в сфере программирования. Ход мыслей у многих программистов правильный, однако, результат от их творчества при этом не радует. Иногда, чтобы увидеть мир, полезно одеть повязку на глаза.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *