JavaScript: Логический тип
Кроме арифметических операций, в математике есть операции сравнения, например 5 > 4 или 3 < 1. Они есть и в программировании. Сравнения часто применяются в реальных задачах. Например, когда мы оформляем покупку в интернет-магазине, система проверяет, хватает ли у пользователя денег на счёте: если сумма на счёте больше или равна цене товара, заказ подтверждается, иначе появляется сообщение о нехватке средств.
Сравнение в программировании
Начнём с примера, в котором сравниваются два числа:
console.log(5 > 4); // => true
console.log(4 > 4); // => falseРезультатом сравнения является значение типа boolean (булев тип). У него всего два возможных значения: true (истина) и false (ложь). Это специальные значения языка, их можно использовать напрямую:
console.log(true);
console.log(false);На практике так их используют редко, но на их основе строится вся логика поведения программы. Мы сталкиваемся с этим каждый день: вводим пин-коды и пароли, выполняем действия, результат которых может быть разным. Программа рассуждает примерно так: если так — делай раз, если иначе — делай два.
В JavaScript доступны следующие операции сравнения:
| Оператор | Смысл |
|---|---|
< | меньше |
<= | меньше или равно |
> | больше |
>= | больше или равно |
=== | строго равно |
!== | строго не равно |
Языки программирования переняли математические операции сравнения почти без изменений, кроме равенства и неравенства. В математике используется обычное =, но в программировании символ = уже занят — он присваивает переменным значения. Поэтому для сравнения на равенство в JavaScript используют ===, а на неравенство — !== (тройной и с восклицательным знаком — это «строгое» сравнение, к которому мы ещё вернёмся).
console.log(5 >= 3); // => true
console.log(7 < 0); // => false
console.log(5 > 5); // => false
console.log(5 >= 5); // => true
console.log(2 === 5); // => false
console.log(2 !== 5); // => trueКогда в сравнении используют конкретные значения, операция кажется бессмысленной: результат и так известен и всегда одинаков. Но всё меняется, когда значения могут быть разными. Напишем простую функцию, которая принимает возраст ребёнка и определяет, младенец ли он. Младенцами считаются дети до двух лет (два не включается):
const isInfant = (age) => age < 2;
console.log(isInfant(3)); // => false
console.log(isInfant(2)); // => false
console.log(isInfant(1)); // => true
console.log(isInfant(0)); // => trueПредикаты
Когда функции возвращают результат сравнения, они обычно отвечают на вопрос «да» или «нет». Такие функции называют предикатами. Их легко узнать: они возвращают логическое значение true или false, а в их названии часто есть проверяемое утверждение (is, has, can). Вот функция, проверяющая, является ли число отрицательным:
const isNegative = (number) => number < 0;
console.log(isNegative(-5)); // => true
console.log(isNegative(7)); // => falseИмена предикатов строят так, чтобы вопрос читался прямо из названия: hasChildren() — «есть ли дети?», isEmpty() — «пустая ли строка?», hasErrors() — «есть ли ошибки?». При этом предикатом считается только функция, которая возвращает именно логическое значение — без исключений.
Задание
Напишите функцию isPensioner(age), которая возвращает true, если возраст age равен 60 или больше, и false в противном случае.
isPensioner(65); // => true
isPensioner(30); // => falseПолезное
Ваше упражнение проверяется по этим тестам
import { expect, test } from 'vitest';
import f from './index.js';
test('bool type', () => {
expect(f(23)).toBe(false);
expect(f(70)).toBe(true);
expect(f(60)).toBe(true);
expect(f(59)).toBe(false);
});Решение учителя откроется через:
20:00
