JavaScript: Цикл For
Цикл while
идеален для ситуаций, когда количество итераций неизвестно заранее, например, при поиске простого числа. Когда количество итераций известно, предпочтительнее использовать цикл for
.
Посмотрим реализацию переворота строки через цикл for
:
const reverseString = (str) => {
let result = '';
for (let i = 0; i < str.length; i += 1) {
result = `${str[i]}${result}`;
}
return result;
};
https://replit.com/@hexlet/js-basics-for
Можно читать так: цикл с индексом i
повторяется пока i < str.length
и после каждого шага увеличивает i
на 1.
В определении цикла for
в круглых скобках есть три выражения, разделённые точкой с запятой:
- Начальное значение счётчика. Этот код выполняется ровно один раз перед первой итерацией.
- Предикат — условие повторения циклов. Выполняется на каждой итерации. Точно так же как и в
while
- Описание изменения счётчика. Этот код выполняется в конце каждой итерации.
В остальном принцип работы точно такой же, как у цикла while
.
В определении for
не обязательно указывать все три выражения. Если не указать условие повторения цикла, то цикл будет выполняться бесконечно:
let i = 1;
// Можно даже не указывать все три выражения
for (;;) {
console.log(i);
i += 1;
}
Задание
Сэмвелл обнаружил, что его сообщения перехватываются и читаются в замке «Близнецы», поэтому его атаки перестали быть внезапными. Немного подумав, он разработал программу, которая будет шифровать передаваемые сообщения по следующему алгоритму. Программа получает на вход строку и меняет местами в ней каждые 2 подряд идущих символа. Если длина строки нечётная, то последний символ остаётся на своём месте.
encrypt('move'); // omev
encrypt('attack'); // taatkc
// Если длина строки нечётное
// то последний символ остается на своем месте
encrypt('go!'); // og!
Реализуйте функцию encrypt()
, которая принимает на вход исходное сообщение и возвращает зашифрованное.
Подумайте. Может ли эта функция расшифровать зашифрованное сообщение?
Упражнение не проходит проверку — что делать? 😶
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет 🤨
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя 🤔
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно 🙄
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Определения
Агрегация — Накопление результата во время итераций и работа с ним после цикла.