Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Логика Основы JavaScript

Кроме арифметических операций со школы нам известны операции сравнения. Например, 5 > 4. Это звучит как вопрос: «5 больше 4?». В данном случае ответ «да». В других случаях ответом может быть «нет», например, для 3 < 1.

Операции сравнения не имеют привязки к числам. Сравнивать можно практически всё что угодно, например, строки. Каждый раз, когда мы входим на какой-то сайт, внутри происходит сравнение введенных логина и пароля с теми, какие есть в базе. И только если они есть, нас пускают внутрь (авторизируют).

Языки программирования адаптировали все математические операции сравнения практически в неизменном виде. Единственное серьезное отличие – операторы равенства и неравенства. В математике для этого используется обычное равно =, но в программировании такое встречается не часто. Во многих языках символ = используется для присваивания значений переменным, поэтому для сравнения взяли == или ===.

Список операций сравнения в JavaScript:

  • < меньше
  • <= меньше или равно
  • > больше
  • >= больше или равно
  • === равно
  • !== не равно

Небольшая ремарка: для равенства и неравенства также существуют операторы == и !=, которые мы не будем использовать из-за потенциальной опасности. Мы поговорим об этом в будущих уроках.

Логический тип

Логическая операция типа 5 > 4 или password === text — это выражение, и его результат — специальное значение true («истина») или false («ложь»). Это новый для нас тип данных — boolean. Он содержит всего лишь два этих значения.

const result = 5 > 4;
console.log(result); // => true
console.log('one' !== 'one'); // => false

Наряду со строками (string), целыми и рациональными числами (number), логический тип (boolean) — это один из примитивных типов данных в JavaScript.

Попробуем написать примитивную функцию, которая принимает на вход возраст ребенка и определяет, младенец ли он. Младенцами считаются дети до года:

const isInfant = (age) => age < 1;

Пользуемся тем фактом, что любая операция — это выражение, поэтому единственной строчкой функции пишем «вернуть то значение, которое получится в результате сравнения age < 1».

В зависимости от пришедшего аргумента, сравнение будет либо истинным (true), либо ложным (false), и return вернёт этот результат.

const isInfant = (age) => age < 1;

isInfant(3); // false

А теперь проверим ребенка, которому полгода:

isInfant(0.5); // true

Предикаты

Функции, подобные isInfant(), называют предикатами. Функции-предикаты (или функции-вопросы) отвечают на какой-то вопрос и всегда (без исключений!) возвращают либо true, либо false.

Предикаты во всех языках принято именовать особым образом для простоты анализа. В JavaScript предикаты, как правило, начинаются с префикса is, has или can, но не ограничены этими словами. Примеры:

  • isInfant() — «младенец ли?»
  • hasChildren() — «есть ли дети?»
  • isEmpty() — «пустой ли?»
  • hasErrors() — «есть ли ошибки?»

Функция может считаться предикатом только если она возвращает boolean.

Давайте напишем еще одну функцию-предикат. Она принимает строку и проверяет, является ли она словом 'Castle':

const isCastle = (type) => type === 'Castle';

isCastle('Sea'); // false

Комбинирование логических операций

Логические операции — это выражения. Значит, логические операции можно комбинировать с другими выражениями.

Например, мы хотим проверить чётность числа, то есть кратность двум. В программировании используют такой подход:

  • проверяют остаток от деления на 2:
  • если остаток 0, то число было чётным
  • если остаток не 0, то число было нечётным

Остаток от деления — простая, но очень важная концепция в арифметике, алгебре, и даже в теории чисел и криптографии. Идея проста: нужно разделить число на несколько равных групп, и если в конце что-то останется — это и есть остаток от деления.

Делим конфеты поровну между людьми:

  • 7 конфет, 2 человека: 2 x 3 + остаток 1. Значит, 7 не кратно 2.
  • 21 конфету, 3 человека: 3 x 7 + остаток 0. Значит, 21 кратно 3.
  • 19 конфет, 5 человек: 5 x 3 + остаток 4. Значит, 19 не кратно 5.

Оператор % вычисляет остаток от деления (не путайте с делением):

7 % 2;  // 1
21 % 3; // 0
19 % 5; // 4

// Проверка четности

10 % 2 // 10 четное, так как остаток 0
9 % 2  // 9 нечетное, так как остаток 1

Напишем функцию проверки чётности:

const isEven = (number) => number % 2 === 0;

isEven(10); // true
isEven(3);  // false

В одном выражении мы скомбинировали логический оператор === (проверка равенства) и арифметический оператор %.

Приоритет арифметических операций выше логических. Значит, сначала вычисляется арифметическое выражение number % 2, затем результат участвует в логическом сравнении.

Словами это можно расшифровать так: «вычислить остаток от деления числа number на 2 и сравнить, равен ли остаток нулю; затем вернуть результат проверки равенства».

Другой пример: напишем функцию, которая принимает строку и проверяет, заглавная ли первая буква.

Алгоритм:

  1. Получим и запишем в переменную первый символ из строки-параметра
  2. Сравним, равен ли символ своей большой (заглавной) версии
  3. Вернём результат
const isFirstLetterInUpperCase = (string) => {
  const firstLetter = string[0];
  return firstLetter.toUpperCase() === firstLetter;
};

isFirstLetterInUpperCase('marmont'); // false
isFirstLetterInUpperCase('Robb');    // true

https://replit.com/@hexlet/js-basics-logica-operations


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов для веб-приложений
6 октября 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов для веб-приложений
6 октября 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
6 октября 16 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и соглашаетесь с «Условиями использования»