HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <h2>Транскрипт урока</h2>
1 <h2>Транскрипт урока</h2>
2 <p>Этот урок будет быстрым и простым, так что пристегнитесь.</p>
2 <p>Этот урок будет быстрым и простым, так что пристегнитесь.</p>
3 <p>Вызовем функцию факториала с циклом while:</p>
3 <p>Вызовем функцию факториала с циклом while:</p>
4 <p>Когда мы работаем с переменными, мы часто поступаем так: меняем их значения, прибавляя к ним сколько-нибудь или умножая их на что-то. Или просто прибавляем или вычитаем единицу.</p>
4 <p>Когда мы работаем с переменными, мы часто поступаем так: меняем их значения, прибавляя к ним сколько-нибудь или умножая их на что-то. Или просто прибавляем или вычитаем единицу.</p>
5 <p>Как и во многих других языках программирования в JavaScript есть для этого упрощенные формы.</p>
5 <p>Как и во многих других языках программирования в JavaScript есть для этого упрощенные формы.</p>
6 <p>Вместо result = result * counter вы можете сказать result *= counter. Результат будет тот же самый, это просто способ сократить запись. Точно так же вы можете поступить со знаками плюс, минус и остатком от деления:</p>
6 <p>Вместо result = result * counter вы можете сказать result *= counter. Результат будет тот же самый, это просто способ сократить запись. Точно так же вы можете поступить со знаками плюс, минус и остатком от деления:</p>
7 <p>Добавление единицы к переменной - тоже очень типичная операция, поэтому вместо counter = counter + 1 можно записать counter++. Так же для минуса - counter = counter - 1 равносильно counter--. Это операторы инкрементирования и декрементирования.</p>
7 <p>Добавление единицы к переменной - тоже очень типичная операция, поэтому вместо counter = counter + 1 можно записать counter++. Так же для минуса - counter = counter - 1 равносильно counter--. Это операторы инкрементирования и декрементирования.</p>
8 <p>Есть два вида, проще их понять на примере:</p>
8 <p>Есть два вида, проще их понять на примере:</p>
9 <p>Если вы поставите ++ после имени переменной - это постфиксная нотация - то фактическое сложение произойдёт после того, как значение вернётся. Вот почему b тут 3: оно получает значение перед тем как меняется a.</p>
9 <p>Если вы поставите ++ после имени переменной - это постфиксная нотация - то фактическое сложение произойдёт после того, как значение вернётся. Вот почему b тут 3: оно получает значение перед тем как меняется a.</p>
10 <p>Если вы поставите ++ перед именем переменной - это префиксная нотация - то фактическое сложение произойдёт перед тем, как значение вернётся. Вот почему b тут 4: оно получает значение после того как меняется a.</p>
10 <p>Если вы поставите ++ перед именем переменной - это префиксная нотация - то фактическое сложение произойдёт перед тем, как значение вернётся. Вот почему b тут 4: оно получает значение после того как меняется a.</p>
11 <p>Но в конце в обоих случаях a становится 4.</p>
11 <p>Но в конце в обоих случаях a становится 4.</p>
12 <p>Это обновлённая функция факториала:</p>
12 <p>Это обновлённая функция факториала:</p>
13 <p>Здесь не имеет значения, используем мы префикс или постфикс когда инкрементируем counter, потому что значение не хранится больше нигде.</p>
13 <p>Здесь не имеет значения, используем мы префикс или постфикс когда инкрементируем counter, потому что значение не хранится больше нигде.</p>
14 <p>Этот код немного проще и короче. Иметь цикл - этот повторяющийся код - со счётчиком контролирующим повторения - распространённый в программировании приём. Поэтому кроме цикла<strong>while</strong>существует цикл<strong>for</strong>. В нем есть встроенные счетчики.</p>
14 <p>Этот код немного проще и короче. Иметь цикл - этот повторяющийся код - со счётчиком контролирующим повторения - распространённый в программировании приём. Поэтому кроме цикла<strong>while</strong>существует цикл<strong>for</strong>. В нем есть встроенные счетчики.</p>
15 <p>Это та же функция факториала, но с циклом<strong>for</strong>вместо цикла<strong>while</strong>:</p>
15 <p>Это та же функция факториала, но с циклом<strong>for</strong>вместо цикла<strong>while</strong>:</p>
16 <p>Здесь три момента:</p>
16 <p>Здесь три момента:</p>
17 <ol><li>Инициализация счётчика.</li>
17 <ol><li>Инициализация счётчика.</li>
18 <li>Условие цикла. Так же как и в цикле while, этот цикл будет повторяться пока это условие истинно.</li>
18 <li>Условие цикла. Так же как и в цикле while, этот цикл будет повторяться пока это условие истинно.</li>
19 <li>Обновление счётчика. Как менять счётчик в каждом шаге.</li>
19 <li>Обновление счётчика. Как менять счётчик в каждом шаге.</li>
20 </ol><p>А затем следует тело, код, который должен повторяться. Нам не нужно менять счётчик в теле, потому что он будет меняться, благодаря этому выражению сверху.</p>
20 </ol><p>А затем следует тело, код, который должен повторяться. Нам не нужно менять счётчик в теле, потому что он будет меняться, благодаря этому выражению сверху.</p>
21 <p>Пришло время использовать все эти навороченные знания и написать код! Переходите к тесту и упражнению прямо сейчас!</p>
21 <p>Пришло время использовать все эти навороченные знания и написать код! Переходите к тесту и упражнению прямо сейчас!</p>
22 <h2>Дополнение к уроку</h2>
22 <h2>Дополнение к уроку</h2>
23 <h3>Скрытые сложности</h3>
23 <h3>Скрытые сложности</h3>
24 <p>Операции декремента и инкремента кажутся мощными механизмами, но их использование привносит ненужную сложность в программы. Код, написанный с их использованием, часто превращается в ребус. Попробуйте ответить, чему равно значение:</p>
24 <p>Операции декремента и инкремента кажутся мощными механизмами, но их использование привносит ненужную сложность в программы. Код, написанный с их использованием, часто превращается в ребус. Попробуйте ответить, чему равно значение:</p>
25 <p>Как видите, этот код заставляет думать, так как кроме арифметических выражений, мы имеем дело с побочными эффектами.</p>
25 <p>Как видите, этот код заставляет думать, так как кроме арифметических выражений, мы имеем дело с побочными эффектами.</p>
26 <p>Во многих языках таких операций нет в принципе. Линтеры (программы, проверяющие код на соответствие стандартам) в JS настроены так, чтобы "ругаться" при виде этих операций в коде. Вместо них предлагается делать так:</p>
26 <p>Во многих языках таких операций нет в принципе. Линтеры (программы, проверяющие код на соответствие стандартам) в JS настроены так, чтобы "ругаться" при виде этих операций в коде. Вместо них предлагается делать так:</p>
27 <p>Что гораздо проще и понятнее. Да, не получится записать выражение в одну строку, но сам код будет очевидным и без сюрпризов.</p>
27 <p>Что гораздо проще и понятнее. Да, не получится записать выражение в одну строку, но сам код будет очевидным и без сюрпризов.</p>
28 <p>Соответствующее правило в eslint:<a>https://eslint.org/docs/rules/no-plusplus</a></p>
28 <p>Соответствующее правило в eslint:<a>https://eslint.org/docs/rules/no-plusplus</a></p>
29 <h3>Switch</h3>
29 <h3>Switch</h3>
30 <p>Конструкция switch может заменить собой несколько условий if. Вот пример обычного условия с if:</p>
30 <p>Конструкция switch может заменить собой несколько условий if. Вот пример обычного условия с if:</p>
31 <p>А вот как его можно переписать с помощью switch:</p>
31 <p>А вот как его можно переписать с помощью switch:</p>
32 <p>break необходим, чтобы выйти из блока switch. Если break отсутствует, то выполнение пойдёт ниже по следующим случаям, игнорируя проверки.<strong>break также можно использовать в циклах for для мгновенного выхода из цикла.</strong></p>
32 <p>break необходим, чтобы выйти из блока switch. Если break отсутствует, то выполнение пойдёт ниже по следующим случаям, игнорируя проверки.<strong>break также можно использовать в циклах for для мгновенного выхода из цикла.</strong></p>
33 <p>Если в примере выше убрать все break'и, а num будет равен 1, то выполнятся все строки:</p>
33 <p>Если в примере выше убрать все break'и, а num будет равен 1, то выполнятся все строки:</p>
34 <p>Так что в итоге answer будет иметь значение "Nothing".</p>
34 <p>Так что в итоге answer будет иметь значение "Nothing".</p>
35 <p>Несколько значений case можно группировать.</p>
35 <p>Несколько значений case можно группировать.</p>
36 <h2>Выводы</h2>
36 <h2>Выводы</h2>
37 <p>Арифметические шорткаты:</p>
37 <p>Арифметические шорткаты:</p>
38 <p>Операторы инкрементирования и декрементирования:</p>
38 <p>Операторы инкрементирования и декрементирования:</p>
39 <p>Пример цикла:</p>
39 <p>Пример цикла:</p>
40 <p>Тут следует упомянуть о том, что все 3 выражения в цикле for не обязательны.</p>
40 <p>Тут следует упомянуть о том, что все 3 выражения в цикле for не обязательны.</p>
41 <p>Например, в блоке инициализации не требуется определять переменные:</p>
41 <p>Например, в блоке инициализации не требуется определять переменные:</p>
42 <p>Как и блок инициализации, блок условия не обязателен. Если пропустите это выражение, вы должны быть уверены, что прервете цикл где-то в теле, а не создадите бесконечный цикл.</p>
42 <p>Как и блок инициализации, блок условия не обязателен. Если пропустите это выражение, вы должны быть уверены, что прервете цикл где-то в теле, а не создадите бесконечный цикл.</p>
43 <p>Вы можете пропустить все 3 блока. Снова убедитесь, что используете break, чтоб закончить цикл, а также изменить счётчик так, чтоб условие для break было истинно в нужный момент.</p>
43 <p>Вы можете пропустить все 3 блока. Снова убедитесь, что используете break, чтоб закончить цикл, а также изменить счётчик так, чтоб условие для break было истинно в нужный момент.</p>
44 <p>Обратите внимание на то, что если внутри тела цикла использовать оператор return, то выполнение цикла будет прервано и функция вернет значение.</p>
44 <p>Обратите внимание на то, что если внутри тела цикла использовать оператор return, то выполнение цикла будет прервано и функция вернет значение.</p>
45  
45