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