Основы JavaScript
Теория: Условия внутри тела цикла
Тело цикла, как и тело функции — это место выполнения инструкций. Значит, мы можем использовать внутри него все изученное ранее, например — условные конструкции.
Представьте себе функцию, которая считает, сколько раз входит буква в предложение. Пример ее работы:
Перед тем как посмотреть ее содержимое, попробуйте ответить на вопросы:
- Является ли эта операция агрегацией?
- Какой будет проверка на вхождение символа?
Эта задача является агрегирующей. Несмотря на то, что она считает не все символы, для подсчета самой суммы все равно приходится анализировать каждый символ.
Ключевое отличие этого цикла от рассмотренных — в наличии условия внутри тела. Переменная count увеличивается только в том случае, когда текущий рассматриваемый символ совпадает с ожидаемым.
В остальном — это типичная агрегатная функция, которая возвращает количество нужных символов вызывающему коду.
Возврат из циклов
Работа с циклами обычно сводится к двум сценариям:
- Агрегация. Накопление результата во время итераций и работа с ним после цикла. Переворот строки как раз относится к такому варианту.
- Выполнение цикла до достижения необходимого результата и выход. Например, задача поиска простых чисел. Напомним, что простое число — это число, которое делится без остатка только на себя и на единицу.
Рассмотрим простой алгоритм проверки простоты числа. Будем делить искомое число x на все числа из диапазона от двух до x - 1 и смотреть остаток от деления. Если в этом диапазоне не найден делитель, который делит число x без остатка, значит, перед нами простое число.
Если задуматься, то можно заметить, что достаточно проверять числа не до x - 1, а до половины числа. Например, 11 не делится на 2, 3, 4, 5. Но и дальше гарантированно не будет делиться на числа больше своей половины. Значит, можно провести небольшую оптимизацию и проверять деление только до x / 2.
Алгоритм построен таким образом, что если во время последовательного деления на числа до x / 2 находится хоть одно, которое делит без остатка, то переданный аргумент — не простое число, а значит, дальнейшие вычисления не имеют смысла. В этом месте стоит возврат false.
И только если цикл отработал целиком, можно сделать вывод, что число — простое, так как не было найдено ни одного числа, которое делит число без остатка.






