0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Кроме арифметических операций со школы нам известны операции сравнения. Например, 5 > 4. Это звучит как вопрос: "5 больше 4?". В данном случае ответ "да". В других случаях ответом может быть "нет", например, для 3 < 1.</p>
1
<p>Кроме арифметических операций со школы нам известны операции сравнения. Например, 5 > 4. Это звучит как вопрос: "5 больше 4?". В данном случае ответ "да". В других случаях ответом может быть "нет", например, для 3 < 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>< меньше</li>
5
<ul><li>< меньше</li>
6
<li><= меньше или равно</li>
6
<li><= меньше или равно</li>
7
<li>> больше</li>
7
<li>> больше</li>
8
<li>>= больше или равно</li>
8
<li>>= больше или равно</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 > 4 или password === text - это выражение, и его результат - специальное значение true ("истина") или false ("ложь"). Это новый для нас тип данных - boolean. Он содержит всего лишь два этих значения.</p>
13
<p>Логическая операция типа 5 > 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 < 1".</p>
16
<p>Пользуемся тем фактом, что любая операция - это выражение, поэтому единственной строчкой функции пишем "вернуть то значение, которое получится в результате сравнения age < 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>