HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Программы, которые мы пишем, становятся все сложнее и объемнее. Они все еще очень далеки от реальных программ, где количество строк кода измеряется десятками и сотнями тысяч (а иногда и миллионами), но текущая сложность уже способна заставить напрячься людей без опыта. Начиная с этого урока, мы переходим к одной из самых сложных базовых тем в программировании - циклам.</p>
1 <p>Программы, которые мы пишем, становятся все сложнее и объемнее. Они все еще очень далеки от реальных программ, где количество строк кода измеряется десятками и сотнями тысяч (а иногда и миллионами), но текущая сложность уже способна заставить напрячься людей без опыта. Начиная с этого урока, мы переходим к одной из самых сложных базовых тем в программировании - циклам.</p>
2 <p>Любые прикладные программы служат очень прагматичным целям. Они помогают управлять сотрудниками, финансами, развлекают в конце концов. Несмотря на различия, все эти программы выполняют заложенные в них алгоритмы, которые очень похожи между собой. Что это такое? Алгоритм - это последовательность действий (инструкций), которая приводит нас к некоему ожидаемому результату. В принципе, это описание подходит под любую программу, но под алгоритмами обычно понимается что-то более специфичное.</p>
2 <p>Любые прикладные программы служат очень прагматичным целям. Они помогают управлять сотрудниками, финансами, развлекают в конце концов. Несмотря на различия, все эти программы выполняют заложенные в них алгоритмы, которые очень похожи между собой. Что это такое? Алгоритм - это последовательность действий (инструкций), которая приводит нас к некоему ожидаемому результату. В принципе, это описание подходит под любую программу, но под алгоритмами обычно понимается что-то более специфичное.</p>
3 <p>Представьте себе, что у нас есть книга, и мы хотим найти внутри нее какую-то конкретную фразу. Саму фразу мы помним, но не знаем, на какой она странице. Как найти нужную страницу? Самый простой (и долгий) способ - последовательно просматривать страницы до тех пор, пока мы не найдем нужную. В худшем случае придется просмотреть все страницы, но результат мы все равно получим. Именно этот процесс и называется алгоритмом. Он включает в себя логические проверки (нашли ли фразу) и перебор страниц. Количество страниц, которое придется посмотреть, заранее неизвестно, но сам процесс просмотра повторяется из раза в раз совершенно одинаковым образом. Для выполнения повторяющихся действий как раз и нужны циклы. Каждый повтор, в таком случае, называется итерацией.</p>
3 <p>Представьте себе, что у нас есть книга, и мы хотим найти внутри нее какую-то конкретную фразу. Саму фразу мы помним, но не знаем, на какой она странице. Как найти нужную страницу? Самый простой (и долгий) способ - последовательно просматривать страницы до тех пор, пока мы не найдем нужную. В худшем случае придется просмотреть все страницы, но результат мы все равно получим. Именно этот процесс и называется алгоритмом. Он включает в себя логические проверки (нашли ли фразу) и перебор страниц. Количество страниц, которое придется посмотреть, заранее неизвестно, но сам процесс просмотра повторяется из раза в раз совершенно одинаковым образом. Для выполнения повторяющихся действий как раз и нужны циклы. Каждый повтор, в таком случае, называется итерацией.</p>
4 <p>Допустим, мы хотим написать функцию, которая выводит на экран все числа от 1 до указанного (через аргументы):</p>
4 <p>Допустим, мы хотим написать функцию, которая выводит на экран все числа от 1 до указанного (через аргументы):</p>
5 <p>Эту функцию невозможно реализовать уже изученными средствами, так как количество выводов на экран заранее неизвестно. А с циклами это не составит никаких проблем:</p>
5 <p>Эту функцию невозможно реализовать уже изученными средствами, так как количество выводов на экран заранее неизвестно. А с циклами это не составит никаких проблем:</p>
6 <p>В коде функции использован цикл while. Он состоит из трех элементов:</p>
6 <p>В коде функции использован цикл while. Он состоит из трех элементов:</p>
7 <ul><li>Ключевое слово while. Несмотря на схожесть с вызовом функций, это не вызов функции.</li>
7 <ul><li>Ключевое слово while. Несмотря на схожесть с вызовом функций, это не вызов функции.</li>
8 <li>Предикат. Условие, которое указывается в скобках после while. Это условие вычисляется и проверяется перед выполнением тела цикла на каждой итерации.</li>
8 <li>Предикат. Условие, которое указывается в скобках после while. Это условие вычисляется и проверяется перед выполнением тела цикла на каждой итерации.</li>
9 <li>Тело цикла. Блок кода в фигурных скобках. Этот блок аналогичен блоку кода в функциях. Все, что определено внутри этого блока (константы или переменные), видно только внутри этого блока.</li>
9 <li>Тело цикла. Блок кода в фигурных скобках. Этот блок аналогичен блоку кода в функциях. Все, что определено внутри этого блока (константы или переменные), видно только внутри этого блока.</li>
10 </ul><p>Конструкция читается так: "пока истинно условие (предикат) i &lt;= lastNumber делать то, что указано в теле цикла". Разберем работу этого кода для вызова printNumbers(3):</p>
10 </ul><p>Конструкция читается так: "пока истинно условие (предикат) i &lt;= lastNumber делать то, что указано в теле цикла". Разберем работу этого кода для вызова printNumbers(3):</p>
11 <p>Самое главное в цикле - завершение его работы (выход из цикла). Процесс, который порождает цикл, должен в конце концов остановиться. Ответственность за остановку полностью лежит на программисте. Обычно задача сводится к введению переменной, называемой "счетчиком цикла". Сначала счетчик инициализируется, то есть ему задается начальное значение. В нашем примере это инструкция let i = 1, выполняемая до входа в цикл. Затем в условии цикла проверяется, достиг ли счетчик своего предельного значения. И, наконец, счетчик меняет свое значение i = i + 1.</p>
11 <p>Самое главное в цикле - завершение его работы (выход из цикла). Процесс, который порождает цикл, должен в конце концов остановиться. Ответственность за остановку полностью лежит на программисте. Обычно задача сводится к введению переменной, называемой "счетчиком цикла". Сначала счетчик инициализируется, то есть ему задается начальное значение. В нашем примере это инструкция let i = 1, выполняемая до входа в цикл. Затем в условии цикла проверяется, достиг ли счетчик своего предельного значения. И, наконец, счетчик меняет свое значение i = i + 1.</p>
12 <p>На этом моменте новички делают больше всего ошибок. Например, случайно забытое увеличение счетчика или неправильная проверка в предикате способны привести к зацикливанию. Это ситуация, при которой цикл работает бесконечно и программа никогда не останавливается. В таком случае приходится ее завершать принудительно (кто знает, может быть, когда зависают реальные программы, в этот момент внутри них выполняется бесконечный цикл).</p>
12 <p>На этом моменте новички делают больше всего ошибок. Например, случайно забытое увеличение счетчика или неправильная проверка в предикате способны привести к зацикливанию. Это ситуация, при которой цикл работает бесконечно и программа никогда не останавливается. В таком случае приходится ее завершать принудительно (кто знает, может быть, когда зависают реальные программы, в этот момент внутри них выполняется бесконечный цикл).</p>
13 <p>В некоторых случаях бесконечные циклы полезны. Здесь мы такие случаи не рассматриваем, но полезно видеть, как выглядит этот код:</p>
13 <p>В некоторых случаях бесконечные циклы полезны. Здесь мы такие случаи не рассматриваем, но полезно видеть, как выглядит этот код:</p>
14 <p>Подводя итог. Когда все же нужны циклы, а когда можно обойтись без них? Физически невозможно обойтись без циклов тогда, когда алгоритм решения задачи требует повторения каких-то действий, как в примере с книгой, и количество этих операций заранее неизвестно.</p>
14 <p>Подводя итог. Когда все же нужны циклы, а когда можно обойтись без них? Физически невозможно обойтись без циклов тогда, когда алгоритм решения задачи требует повторения каких-то действий, как в примере с книгой, и количество этих операций заранее неизвестно.</p>
15 <h2>Синтаксический сахар</h2>
15 <h2>Синтаксический сахар</h2>
16 <p>Подобные конструкции index = index + 1 в JavaScript используются довольно часто, поэтому создатели языка добавили сокращенный вариант записи: index += 1. Такие сокращения принято называть<strong>синтаксическим сахаром</strong>, потому что они делают процесс написания кода немного проще и приятнее, "подслащивая" его :)</p>
16 <p>Подобные конструкции index = index + 1 в JavaScript используются довольно часто, поэтому создатели языка добавили сокращенный вариант записи: index += 1. Такие сокращения принято называть<strong>синтаксическим сахаром</strong>, потому что они делают процесс написания кода немного проще и приятнее, "подслащивая" его :)</p>
17 <p>Существуют сокращенные формы для всех арифметических операций и для конкатенации строк:</p>
17 <p>Существуют сокращенные формы для всех арифметических операций и для конкатенации строк:</p>
18 <ul><li>a = a + 1 → a += 1</li>
18 <ul><li>a = a + 1 → a += 1</li>
19 <li>a = a - 1 → a -= 1</li>
19 <li>a = a - 1 → a -= 1</li>
20 <li>a = a * 2 → a *= 2</li>
20 <li>a = a * 2 → a *= 2</li>
21 <li>a = a / 1 → a /= 1</li>
21 <li>a = a / 1 → a /= 1</li>
22 <li>a = a + 'foo' → a += 'foo'</li>
22 <li>a = a + 'foo' → a += 'foo'</li>
23 </ul>
23 </ul>