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>Смотрите, в математике есть концепция абсолютного значения. Оно определяется так:</p>
3 <p>Смотрите, в математике есть концепция абсолютного значения. Оно определяется так:</p>
4 <p>Не беспокойтесь, это просто: если число положительное, то его абсолютное значение - это то же число; если число отрицательное, то его абсолютное значение - противоположное ему число. Проще говоря, отбросьте знак отрицания, если он есть, и всё.</p>
4 <p>Не беспокойтесь, это просто: если число положительное, то его абсолютное значение - это то же число; если число отрицательное, то его абсолютное значение - противоположное ему число. Проще говоря, отбросьте знак отрицания, если он есть, и всё.</p>
5 <p>Это можно представить в виде расстояния от нуля.</p>
5 <p>Это можно представить в виде расстояния от нуля.</p>
6 <p>Допустим, вам требуется описать чёрный ящик - функцию, которая принимает число и возвращает его абсолютное значение. Вам потребуется создать правило внутри ящика, вроде этого:</p>
6 <p>Допустим, вам требуется описать чёрный ящик - функцию, которая принимает число и возвращает его абсолютное значение. Вам потребуется создать правило внутри ящика, вроде этого:</p>
7 <p>IF number больше 0 THEN return number IF number меньше 0 THEN return -number IF number равно 0 THEN return 0</p>
7 <p>IF number больше 0 THEN return number IF number меньше 0 THEN return -number IF number равно 0 THEN return 0</p>
8 <p>Это<strong>условие</strong>и формально оно выглядит вот так:</p>
8 <p>Это<strong>условие</strong>и формально оно выглядит вот так:</p>
9 <p>IF (условие) THEN do something ELSE IF (другое_условие) THEN do some other thing ELSE (none of those conditions) THEN do something else</p>
9 <p>IF (условие) THEN do something ELSE IF (другое_условие) THEN do some other thing ELSE (none of those conditions) THEN do something else</p>
10 <p>Теперь давайте напишем настоящую функцию:</p>
10 <p>Теперь давайте напишем настоящую функцию:</p>
11 <p>У этой функции один<strong>параметр</strong>- она принимает извне один аргумент. Затем идёт ключевое слово if , затем условие в скобках, затем - блок инструкций, который запускается, если аргумент отвечает условию. Следующее условие с else if. Оно означает, что "если предыдущее условие не было удовлетворено, но это новое удовлетворено - перейти к выполнению следующего блока инструкций".</p>
11 <p>У этой функции один<strong>параметр</strong>- она принимает извне один аргумент. Затем идёт ключевое слово if , затем условие в скобках, затем - блок инструкций, который запускается, если аргумент отвечает условию. Следующее условие с else if. Оно означает, что "если предыдущее условие не было удовлетворено, но это новое удовлетворено - перейти к выполнению следующего блока инструкций".</p>
12 <p>Таких блоков "else if" может быть несколько, иногда у вас есть множество альтернатив.</p>
12 <p>Таких блоков "else if" может быть несколько, иногда у вас есть множество альтернатив.</p>
13 <p>Теперь, когда мы разобрались с положительными и отрицательными числами, остался ещё один вариант: что, если у числа значение 0. Заметьте, мы не уточняем, что число явно 0, мы просто указываем else. Это значит "если ни одно из вышеуказанных условий не удовлетворяется, переходить к следующему блоку инструкций." Вы можете спокойно считать, что если число не положительное и не отрицательное, оно может быть только нулём. Но иногда мы совершаем ошибки, думая об условиях и альтернативах, а многие проблемы в программировании появляются из-за ошибочных условий.</p>
13 <p>Теперь, когда мы разобрались с положительными и отрицательными числами, остался ещё один вариант: что, если у числа значение 0. Заметьте, мы не уточняем, что число явно 0, мы просто указываем else. Это значит "если ни одно из вышеуказанных условий не удовлетворяется, переходить к следующему блоку инструкций." Вы можете спокойно считать, что если число не положительное и не отрицательное, оно может быть только нулём. Но иногда мы совершаем ошибки, думая об условиях и альтернативах, а многие проблемы в программировании появляются из-за ошибочных условий.</p>
14 <p>Эти условия в скобках могут быть либо true (истина) либо false (ложь). Например, (num &gt; 0) истинно, когда num равно 9 или 15, но ложно, если num имеет значение -18 или, скажем, 0.</p>
14 <p>Эти условия в скобках могут быть либо true (истина) либо false (ложь). Например, (num &gt; 0) истинно, когда num равно 9 или 15, но ложно, если num имеет значение -18 или, скажем, 0.</p>
15 <p>Как вы видите математические знаки больше и меньше как бы отвечают ДА или НЕТ, ИСТИНА (true) или ЛОЖЬ (false). Есть другие выражения, которые дают ответы TRUE или FALSE:</p>
15 <p>Как вы видите математические знаки больше и меньше как бы отвечают ДА или НЕТ, ИСТИНА (true) или ЛОЖЬ (false). Есть другие выражения, которые дают ответы TRUE или FALSE:</p>
16 <p>=== !== &gt; &lt; &gt;= &lt;=</p>
16 <p>=== !== &gt; &lt; &gt;= &lt;=</p>
17 <p>Вот несколько примеров:</p>
17 <p>Вот несколько примеров:</p>
18 <p>512 === 512; // true 512 === 988; // false 512 !== 378; // true 512 !== 512; // false 512 &gt; 500; // true 512 &gt; 689; // false 512 &lt; 900; // true 512 &lt; -30; // false 512 &gt;= 512; // true 512 &gt;= 777; // false 512 &lt;= 512; // true 512 &lt;= 600; // true 512 &lt;= 5; // false</p>
18 <p>512 === 512; // true 512 === 988; // false 512 !== 378; // true 512 !== 512; // false 512 &gt; 500; // true 512 &gt; 689; // false 512 &lt; 900; // true 512 &lt; -30; // false 512 &gt;= 512; // true 512 &gt;= 777; // false 512 &lt;= 512; // true 512 &lt;= 600; // true 512 &lt;= 5; // false</p>
19 <p>Область математики, которая изучает значения true и false называется Алгеброй логики. В целом, утверждения любого типа, не только относящиеся к числам, могут быть истинными или ложными. Например, "Я человек" это<strong>истина</strong>, а "Китай находится в Южной Америке" -<strong>ложь</strong>.</p>
19 <p>Область математики, которая изучает значения true и false называется Алгеброй логики. В целом, утверждения любого типа, не только относящиеся к числам, могут быть истинными или ложными. Например, "Я человек" это<strong>истина</strong>, а "Китай находится в Южной Америке" -<strong>ложь</strong>.</p>
20 <p>В JavaScript есть значения true и false, и их можно использовать в условиях. Например, вы можете ввести if true, и это условие всегда будет удовлетворяться, потому что true всегда истинно.</p>
20 <p>В JavaScript есть значения true и false, и их можно использовать в условиях. Например, вы можете ввести if true, и это условие всегда будет удовлетворяться, потому что true всегда истинно.</p>
21 <p>В Алгебре логики множество аспектов и деталей, но в программировании мы в основном фокусируемся на трёх примитивных операциях: AND, OR, NOT.</p>
21 <p>В Алгебре логики множество аспектов и деталей, но в программировании мы в основном фокусируемся на трёх примитивных операциях: AND, OR, NOT.</p>
22 <p>AND используется, когда вам нужно, чтобы два условия были истиной. "Я человек AND лошади едят траву" - true, потому что оба утверждения истинны. "Я человек AND свиньи могут летать" - false, потому что одно утверждение истинно, а другое ложно, и вся конструкция в этом случае, объединённая операцией AND - ложна.</p>
22 <p>AND используется, когда вам нужно, чтобы два условия были истиной. "Я человек AND лошади едят траву" - true, потому что оба утверждения истинны. "Я человек AND свиньи могут летать" - false, потому что одно утверждение истинно, а другое ложно, и вся конструкция в этом случае, объединённая операцией AND - ложна.</p>
23 <p>Символ для AND - двойной амперсанд &amp;&amp;. Эта так называемая таблица истинности для операции AND - своеобразная шпаргалка:</p>
23 <p>Символ для AND - двойной амперсанд &amp;&amp;. Эта так называемая таблица истинности для операции AND - своеобразная шпаргалка:</p>
24 <p>Так что только TRUE AND TRUE даёт TRUE, а все остальные комбинации содержат FALSE, поэтому их результат - FALSE.</p>
24 <p>Так что только TRUE AND TRUE даёт TRUE, а все остальные комбинации содержат FALSE, поэтому их результат - FALSE.</p>
25 <p>OR используется, если вам нужно, чтобы хотя бы одно условие было true. Тот же пример, "Я человек OR лошади едят траву" - true. "Я человек OR свиньи могут летать" - тоже true. Хотя свиньи и не могут летать, я - человек, поэтому одно из этих двух утверждений - true, что делает всю конструкцию, объединённую OR, true.</p>
25 <p>OR используется, если вам нужно, чтобы хотя бы одно условие было true. Тот же пример, "Я человек OR лошади едят траву" - true. "Я человек OR свиньи могут летать" - тоже true. Хотя свиньи и не могут летать, я - человек, поэтому одно из этих двух утверждений - true, что делает всю конструкцию, объединённую OR, true.</p>
26 <p>Символ для OR - две вертикальных полоски ||.</p>
26 <p>Символ для OR - две вертикальных полоски ||.</p>
27 <p>Если в конструкции присутствует true, значит результат true.</p>
27 <p>Если в конструкции присутствует true, значит результат true.</p>
28 <p>NOT - это просто - это противоположное. NOT true - это false, NOT false - это true. "NOT свиньи могут летать" - true, потому что "свиньи могут летать" - false, а не false - это true.</p>
28 <p>NOT - это просто - это противоположное. NOT true - это false, NOT false - это true. "NOT свиньи могут летать" - true, потому что "свиньи могут летать" - false, а не false - это true.</p>
29 <p>Символ для NOT - восклицательный знак !.</p>
29 <p>Символ для NOT - восклицательный знак !.</p>
30 <p>В программировании обычно есть множество способов выполнения одной операции. Мы можем написать свою функцию абсолютного значения по-другому и получить тот же результат. Давайте попробуем это сделать, используя новые идеи:</p>
30 <p>В программировании обычно есть множество способов выполнения одной операции. Мы можем написать свою функцию абсолютного значения по-другому и получить тот же результат. Давайте попробуем это сделать, используя новые идеи:</p>
31 <p>Теперь у нас есть всего два условия:</p>
31 <p>Теперь у нас есть всего два условия:</p>
32 <ol><li>Если число имеет значение 0 ИЛИ число больше 0, то возвращать само число.</li>
32 <ol><li>Если число имеет значение 0 ИЛИ число больше 0, то возвращать само число.</li>
33 <li>В любом другом случае возвращать -число.</li>
33 <li>В любом другом случае возвращать -число.</li>
34 </ol><p>Можно придумать ещё один способ записи той же функции, например, используя "больше чем или равно". Когда я говорю "та же функция", я имею в виду, что поведение и назначение функции точно такое же, но её внутренности - набор инструкций, из которых она состоит - могут отличаться.</p>
34 </ol><p>Можно придумать ещё один способ записи той же функции, например, используя "больше чем или равно". Когда я говорю "та же функция", я имею в виду, что поведение и назначение функции точно такое же, но её внутренности - набор инструкций, из которых она состоит - могут отличаться.</p>
35 <h2>Дополнение к уроку</h2>
35 <h2>Дополнение к уроку</h2>
36 <h3>Условия</h3>
36 <h3>Условия</h3>
37 <p><strong>Условие</strong>формально выглядит так:</p>
37 <p><strong>Условие</strong>формально выглядит так:</p>
38 <p>if (условие) then выполнить что-то else if (другое_условие) then выполнить что-то другое else (ни одного из тех условий) then выполнить что-то ещё</p>
38 <p>if (условие) then выполнить что-то else if (другое_условие) then выполнить что-то другое else (ни одного из тех условий) then выполнить что-то ещё</p>
39 <p>JavaScript-функция, которая принимает значение и возвращает абсолютное значение:</p>
39 <p>JavaScript-функция, которая принимает значение и возвращает абсолютное значение:</p>
40 <p>Условие может быть либо истинным (true) либо ложным (false). Например, (num &gt; 0) истинно, когда num равно 9 или 15, но ложно, когда num -18 или, скажем, 0.</p>
40 <p>Условие может быть либо истинным (true) либо ложным (false). Например, (num &gt; 0) истинно, когда num равно 9 или 15, но ложно, когда num -18 или, скажем, 0.</p>
41 <p>То, что даёт ответ TRUE или FALSE, называется<strong>предикатом</strong>.</p>
41 <p>То, что даёт ответ TRUE или FALSE, называется<strong>предикатом</strong>.</p>
42 <p>Математические предикаты в JavaScript:</p>
42 <p>Математические предикаты в JavaScript:</p>
43 <p>=== !== &gt; &lt; &gt;= &lt;=</p>
43 <p>=== !== &gt; &lt; &gt;= &lt;=</p>
44 <p>Примеры:</p>
44 <p>Примеры:</p>
45 <p>512 === 512; // true 512 === 988; // false 512 !== 378; // true 512 !== 512; // false 512 &gt; 500; // true 512 &gt; 689; // false 512 &lt; 900; // true 512 &lt; -30; // false 512 &gt;= 512; // true 512 &gt;= 777; // false 512 &lt;= 512; // true 512 &lt;= 600; // true 512 &lt;= 5; // false</p>
45 <p>512 === 512; // true 512 === 988; // false 512 !== 378; // true 512 !== 512; // false 512 &gt; 500; // true 512 &gt; 689; // false 512 &lt; 900; // true 512 &lt; -30; // false 512 &gt;= 512; // true 512 &gt;= 777; // false 512 &lt;= 512; // true 512 &lt;= 600; // true 512 &lt;= 5; // false</p>
46 <p>AND (&amp;&amp;):</p>
46 <p>AND (&amp;&amp;):</p>
47 <p>OR (||):</p>
47 <p>OR (||):</p>
48 <p>NOT (!):</p>
48 <p>NOT (!):</p>
49 <p>Альтернативный способ реализации функции abs:</p>
49 <p>Альтернативный способ реализации функции abs:</p>
50 <p>Можно придумать другой способ реализации той же функции, с использованием символа &gt;= .</p>
50 <p>Можно придумать другой способ реализации той же функции, с использованием символа &gt;= .</p>
51 <p><em>Та же функция</em>значит: "назначение функции то же, но внутренность (реализация) может отличаться".</p>
51 <p><em>Та же функция</em>значит: "назначение функции то же, но внутренность (реализация) может отличаться".</p>
52 <h3>Тернарный оператор</h3>
52 <h3>Тернарный оператор</h3>
53 <p>В JavaScript и многих других языках есть сокращённая версия if: она называется<strong>тернарным оператором</strong>(ternary operator):</p>
53 <p>В JavaScript и многих других языках есть сокращённая версия if: она называется<strong>тернарным оператором</strong>(ternary operator):</p>
54 <p>В этом случае есть только одно составное условие и два варианта: один для true и один для false.</p>
54 <p>В этом случае есть только одно составное условие и два варианта: один для true и один для false.</p>
55 <p>Мы создаём absValue и присваиваем ему значение. Это значение зависит от условия: если условие истинно, тогда используется num , в противном случае используется -num.</p>
55 <p>Мы создаём absValue и присваиваем ему значение. Это значение зависит от условия: если условие истинно, тогда используется num , в противном случае используется -num.</p>
56 <h3>Тернарная операция VS условная конструкция if</h3>
56 <h3>Тернарная операция VS условная конструкция if</h3>
57 <p>Между этими двумя элементами языка есть различия. Тернарная, или условная, операция<strong>вычисляет и возвращает значение</strong>, то есть является<strong>выражением</strong>. Это значит, что мы можем сохранить результат вычисления этого выражения в константе, например:</p>
57 <p>Между этими двумя элементами языка есть различия. Тернарная, или условная, операция<strong>вычисляет и возвращает значение</strong>, то есть является<strong>выражением</strong>. Это значит, что мы можем сохранить результат вычисления этого выражения в константе, например:</p>
58 <p>Условная конструкция if в JavaScript выражением НЕ является. Это<strong>инструкция</strong>- она выполняет<strong>действие</strong>, ничего не вычисляя и не возвращая. Как следствие, мы НЕ можем с помощью конструкции if сделать так же:</p>
58 <p>Условная конструкция if в JavaScript выражением НЕ является. Это<strong>инструкция</strong>- она выполняет<strong>действие</strong>, ничего не вычисляя и не возвращая. Как следствие, мы НЕ можем с помощью конструкции if сделать так же:</p>
59 <p>Такая строчка кода приведёт к ошибке. Кстати, в некоторых других языках, например в Ruby, if реализован как выражение, поэтому там подобное присваивание возможно.</p>
59 <p>Такая строчка кода приведёт к ошибке. Кстати, в некоторых других языках, например в Ruby, if реализован как выражение, поэтому там подобное присваивание возможно.</p>
60 <p>Чтобы сделать то же самое, придётся "попотеть":</p>
60 <p>Чтобы сделать то же самое, придётся "попотеть":</p>
61 <p>Как видно, код стал более громоздким и сложным. Более того, нам пришлось ввести изменяемое состояние - вместо константы const использовать переменную (let). То есть мы позволили всему остальному коду изменять значение absValue, хотя объективно это больше нигде не понадобится. Тем самым мы заложили потенциальную возможность для будущих ошибок.</p>
61 <p>Как видно, код стал более громоздким и сложным. Более того, нам пришлось ввести изменяемое состояние - вместо константы const использовать переменную (let). То есть мы позволили всему остальному коду изменять значение absValue, хотя объективно это больше нигде не понадобится. Тем самым мы заложили потенциальную возможность для будущих ошибок.</p>
62 <p>Результат вычисления тернарной операции можно вернуть из функции, поставив её после инструкции return. Особенно хорошо она сочетается с функциями-однострочниками, когда надо вернуть то или иное значение в зависимости от логического условия:</p>
62 <p>Результат вычисления тернарной операции можно вернуть из функции, поставив её после инструкции return. Особенно хорошо она сочетается с функциями-однострочниками, когда надо вернуть то или иное значение в зависимости от логического условия:</p>
63 <p>Вместо унылого:</p>
63 <p>Вместо унылого:</p>
64 <p>Таким образом, тернарная операция позволяет писать более лаконичный и простой код. Но не стоит увлекаться, у неё есть свои минусы и ограничения по сравнению с конструкцией if, всё зависит от конкретной ситуации:</p>
64 <p>Таким образом, тернарная операция позволяет писать более лаконичный и простой код. Но не стоит увлекаться, у неё есть свои минусы и ограничения по сравнению с конструкцией if, всё зависит от конкретной ситуации:</p>
65 <ul><li><p>"Вложенные" тернарные операции выглядят эффектно, но ухудшают читабельность кода:</p>
65 <ul><li><p>"Вложенные" тернарные операции выглядят эффектно, но ухудшают читабельность кода:</p>
66 </li>
66 </li>
67 <li><p>Тернарная операция не подойдёт, если в зависимости от условия надо выполнить несколько (а не одно выражение) строчек кода (блок кода). Нужна условная конструкция if:</p>
67 <li><p>Тернарная операция не подойдёт, если в зависимости от условия надо выполнить несколько (а не одно выражение) строчек кода (блок кода). Нужна условная конструкция if:</p>
68 </li>
68 </li>
69 <li><p>В теле функции, мы можем легко вернуть результат вычисления тернарника, поставив его после инструкции return. Ведь это обыкновенное выражение. Однако, инструкцию return нельзя использовать<strong>внутри</strong>тернарной операции. Интерпретатор вас не поймёт и выкинет ошибку:</p>
69 <li><p>В теле функции, мы можем легко вернуть результат вычисления тернарника, поставив его после инструкции return. Ведь это обыкновенное выражение. Однако, инструкцию return нельзя использовать<strong>внутри</strong>тернарной операции. Интерпретатор вас не поймёт и выкинет ошибку:</p>
70 </li>
70 </li>
71 </ul>
71 </ul>