HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Кроме арифметических операций со школы нам известны операции сравнения. Например, 5 &gt; 4. Это звучит как вопрос: "5 больше 4?". В данном случае ответ "да". В других случаях ответом может быть "нет", например, для 3 &lt; 1.</p>
1 <p>Кроме арифметических операций со школы нам известны операции сравнения. Например, 5 &gt; 4. Это звучит как вопрос: "5 больше 4?". В данном случае ответ "да". В других случаях ответом может быть "нет", например, для 3 &lt; 1.</p>
2 <p>Операции сравнения не имеют привязки к числам. Сравнивать можно практически все что угодно, например, строки. Каждый раз, когда мы входим на какой-то сайт, внутри происходит сравнение введенных логина и пароля с теми, какие есть в базе. И только если они есть, нас авторизируют.</p>
2 <p>Операции сравнения не имеют привязки к числам. Сравнивать можно практически все что угодно, например, строки. Каждый раз, когда мы входим на какой-то сайт, внутри происходит сравнение введенных логина и пароля с теми, какие есть в базе. И только если они есть, нас авторизируют.</p>
3 <p>Языки программирования адаптировали все математические операции сравнения практически в неизменном виде. Единственное серьезное отличие - операторы равенства и неравенства. В математике для этого используется обычное равно =, но в программировании такое встречается не часто. Во многих языках символ = используется для присваивания значений переменным, поэтому для сравнения взяли == или ===.</p>
3 <p>Языки программирования адаптировали все математические операции сравнения практически в неизменном виде. Единственное серьезное отличие - операторы равенства и неравенства. В математике для этого используется обычное равно =, но в программировании такое встречается не часто. Во многих языках символ = используется для присваивания значений переменным, поэтому для сравнения взяли == или ===.</p>
4 <p>Список операций сравнения в JavaScript:</p>
4 <p>Список операций сравнения в JavaScript:</p>
5 <ul><li>&lt; меньше</li>
5 <ul><li>&lt; меньше</li>
6 <li>&lt;= меньше или равно</li>
6 <li>&lt;= меньше или равно</li>
7 <li>&gt; больше</li>
7 <li>&gt; больше</li>
8 <li>&gt;= больше или равно</li>
8 <li>&gt;= больше или равно</li>
9 <li>=== равно</li>
9 <li>=== равно</li>
10 <li>!== не равно</li>
10 <li>!== не равно</li>
11 </ul><p><em>Небольшая ремарка: для равенства и неравенства также существуют операторы == и !=, которые мы не будем использовать из-за потенциальной опасности. Мы поговорим об этом в будущих уроках.</em></p>
11 </ul><p><em>Небольшая ремарка: для равенства и неравенства также существуют операторы == и !=, которые мы не будем использовать из-за потенциальной опасности. Мы поговорим об этом в будущих уроках.</em></p>
12 <h2>Логический тип</h2>
12 <h2>Логический тип</h2>
13 <p>Логическая операция типа 5 &gt; 4 или password === text - это выражение, и его результат - специальное значение true ("истина") или false ("ложь"). Это новый для нас тип данных - boolean. Он содержит всего лишь два этих значения.</p>
13 <p>Логическая операция типа 5 &gt; 4 или password === text - это выражение, и его результат - специальное значение true ("истина") или false ("ложь"). Это новый для нас тип данных - boolean. Он содержит всего лишь два этих значения.</p>
14 <p>Наряду со строками (string), целыми и рациональными числами (number), логический тип (boolean) - это один из примитивных типов данных в JavaScript.</p>
14 <p>Наряду со строками (string), целыми и рациональными числами (number), логический тип (boolean) - это один из примитивных типов данных в JavaScript.</p>
15 <p>Попробуем написать примитивную функцию, которая принимает на вход возраст ребенка и определяет, младенец ли он. Младенцами считаются дети до года:</p>
15 <p>Попробуем написать примитивную функцию, которая принимает на вход возраст ребенка и определяет, младенец ли он. Младенцами считаются дети до года:</p>
16 <p>Пользуемся тем фактом, что любая операция - это выражение, поэтому единственной строчкой функции пишем "вернуть то значение, которое получится в результате сравнения age &lt; 1".</p>
16 <p>Пользуемся тем фактом, что любая операция - это выражение, поэтому единственной строчкой функции пишем "вернуть то значение, которое получится в результате сравнения age &lt; 1".</p>
17 <p>В зависимости от пришедшего аргумента, сравнение будет либо истинным (true), либо ложным (false), и return вернет этот результат.</p>
17 <p>В зависимости от пришедшего аргумента, сравнение будет либо истинным (true), либо ложным (false), и return вернет этот результат.</p>
18 <p>А теперь проверим ребенка, которому полгода:</p>
18 <p>А теперь проверим ребенка, которому полгода:</p>
19 <h2>Предикаты</h2>
19 <h2>Предикаты</h2>
20 <p>Функции, подобные isInfant(), называют предикатами. Функции-предикаты (или функции-вопросы) отвечают на какой-то вопрос и всегда (без исключений!) возвращают либо true, либо false.</p>
20 <p>Функции, подобные isInfant(), называют предикатами. Функции-предикаты (или функции-вопросы) отвечают на какой-то вопрос и всегда (без исключений!) возвращают либо true, либо false.</p>
21 <p>Предикаты во всех языках принято именовать особым образом для простоты анализа. В JavaScript предикаты, как правило, начинаются с префикса is, has или can, но не ограничены этими словами. Примеры:</p>
21 <p>Предикаты во всех языках принято именовать особым образом для простоты анализа. В JavaScript предикаты, как правило, начинаются с префикса is, has или can, но не ограничены этими словами. Примеры:</p>
22 <ul><li>isInfant() - "младенец ли?"</li>
22 <ul><li>isInfant() - "младенец ли?"</li>
23 <li>hasChildren() - "есть ли дети?"</li>
23 <li>hasChildren() - "есть ли дети?"</li>
24 <li>isEmpty() - "пустой ли?"</li>
24 <li>isEmpty() - "пустой ли?"</li>
25 <li>hasErrors() - "есть ли ошибки?"</li>
25 <li>hasErrors() - "есть ли ошибки?"</li>
26 </ul><p>Функция может считаться предикатом<strong>только</strong>если она возвращает boolean.</p>
26 </ul><p>Функция может считаться предикатом<strong>только</strong>если она возвращает boolean.</p>
27 <p>Давайте напишем еще одну функцию-предикат. Она принимает строку и проверяет, является ли она словом 'Castle':</p>
27 <p>Давайте напишем еще одну функцию-предикат. Она принимает строку и проверяет, является ли она словом 'Castle':</p>
28 <h2>Комбинирование логических операций</h2>
28 <h2>Комбинирование логических операций</h2>
29 <p>Логические операции - это выражения. Значит, логические операции можно комбинировать с другими выражениями.</p>
29 <p>Логические операции - это выражения. Значит, логические операции можно комбинировать с другими выражениями.</p>
30 <p>Например, мы хотим проверить четность числа, то есть кратность двум. В программировании используют такой подход:</p>
30 <p>Например, мы хотим проверить четность числа, то есть кратность двум. В программировании используют такой подход:</p>
31 <ul><li>проверяют остаток от деления на 2:</li>
31 <ul><li>проверяют остаток от деления на 2:</li>
32 <li>если остаток 0, то число было четным</li>
32 <li>если остаток 0, то число было четным</li>
33 <li>если остаток не 0, то число было нечетным</li>
33 <li>если остаток не 0, то число было нечетным</li>
34 </ul><p>Остаток от деления - простая, но очень важная концепция в арифметике, алгебре, и даже в теории чисел и криптографии. Идея проста: нужно разделить число на несколько равных групп, и если в конце что-то останется - это и есть остаток от деления.</p>
34 </ul><p>Остаток от деления - простая, но очень важная концепция в арифметике, алгебре, и даже в теории чисел и криптографии. Идея проста: нужно разделить число на несколько равных групп, и если в конце что-то останется - это и есть остаток от деления.</p>
35 <p>Делим конфеты поровну между людьми:</p>
35 <p>Делим конфеты поровну между людьми:</p>
36 <ul><li>7 конфет, 2 человека: 2 x 3 +<strong>остаток 1</strong>. Значит, 7 не кратно 2.</li>
36 <ul><li>7 конфет, 2 человека: 2 x 3 +<strong>остаток 1</strong>. Значит, 7 не кратно 2.</li>
37 <li>21 конфету, 3 человека: 3 x 7 +<strong>остаток 0</strong>. Значит, 21 кратно 3.</li>
37 <li>21 конфету, 3 человека: 3 x 7 +<strong>остаток 0</strong>. Значит, 21 кратно 3.</li>
38 <li>19 конфет, 5 человек: 5 x 3 +<strong>остаток 4</strong>. Значит, 19 не кратно 5.</li>
38 <li>19 конфет, 5 человек: 5 x 3 +<strong>остаток 4</strong>. Значит, 19 не кратно 5.</li>
39 </ul><p>Оператор % вычисляет остаток от деления (не путайте с делением):</p>
39 </ul><p>Оператор % вычисляет остаток от деления (не путайте с делением):</p>
40 <p>Напишем функцию проверки четности:</p>
40 <p>Напишем функцию проверки четности:</p>
41 <p>В одном выражении мы скомбинировали логический оператор === (проверка равенства) и арифметический оператор %.</p>
41 <p>В одном выражении мы скомбинировали логический оператор === (проверка равенства) и арифметический оператор %.</p>
42 <p>Приоритет арифметических операций выше логических. Значит, сначала вычисляется арифметическое выражение number % 2, затем результат участвует в логическом сравнении.</p>
42 <p>Приоритет арифметических операций выше логических. Значит, сначала вычисляется арифметическое выражение number % 2, затем результат участвует в логическом сравнении.</p>
43 <p>Словами это можно расшифровать так:<em>"вычислить остаток от деления числа number на 2 и сравнить, равен ли остаток нулю; затем вернуть результат проверки равенства"</em>.</p>
43 <p>Словами это можно расшифровать так:<em>"вычислить остаток от деления числа number на 2 и сравнить, равен ли остаток нулю; затем вернуть результат проверки равенства"</em>.</p>
44 <p>Другой пример: напишем функцию, которая принимает строку и проверяет, заглавная ли первая буква.</p>
44 <p>Другой пример: напишем функцию, которая принимает строку и проверяет, заглавная ли первая буква.</p>
45 <p>Алгоритм:</p>
45 <p>Алгоритм:</p>
46 <ol><li>Получим и запишем в константу первый символ из строки-параметра</li>
46 <ol><li>Получим и запишем в константу первый символ из строки-параметра</li>
47 <li>Сравним, равен ли символ своей большой (заглавной) версии</li>
47 <li>Сравним, равен ли символ своей большой (заглавной) версии</li>
48 <li>Вернем результат</li>
48 <li>Вернем результат</li>
49 </ol>
49 </ol>