На базовом уровне компьютеры оперируют только числами. Даже в прикладных программах на высокоуровневых языках внутри много чисел и операций над ними. К счастью, для старта достаточно знать обычную арифметику — с нее и начнем.
Для сложения двух чисел в математике мы пишем, например, 3 + 4
. В программировании — то же самое. Вот программа, складывающая два числа:
// Не забываем точку с запятой в конце,
// так как каждая строчка в коде – инструкция
3 + 4;
Инструкция 3 + 4;
заставит компьютер сложить числа и узнать результат. Если запустить эту программу, то ничего не произойдет. А если быть точными, то компьютер вычислит сумму, но на этом все. Результат сложения никак не используется, и такая программа не представляет никакого интереса. Нам нужно попросить компьютер сложить 3 + 4
и дать команду сделать что-то с результатом. Например, вывести его на экран:
// Сначала вычисляется сумма,
// затем она передается в функцию печати
console.log(3 + 4); // => '7'
Всегда отбивайте арифметические операторы пробелами от самих чисел (операндов) – это хороший стиль программирования. Поэтому в наших примерах console.log(3 + 4)
, а не console.log(3+4)
.
Кроме сложения, доступны следующие операции:
*
— умножение/
— деление-
— вычитание%
— остаток от деления**
— возведение в степень
Теперь давайте выведем на экран результат деления, а потом результат возведения в степень:
console.log(8 / 2); // => 4
console.log(3 ** 2); // => 9
Первая инструкция выведет на экран 4
(потому что 8 / 2 это 4), а вторая инструкция выведет на экран 9
(потому что 32 это 9).
Операторы
Перед тем, как двигаться дальше, разберем базовую терминологию. Знак операции, такой как +
, называют оператором. Операторы выполняют операции над определенными значениями, которые называются операндами. Сами операторы обычно представлены одним или несколькими символами. Реже словом. Подавляющее большинство операторов соответствуют математическим операциям.
console.log(8 + 2);
В этом примере +
— это оператор, а числа 8
и 2
— это операнды.
В случае сложения у нас есть два операнда: один слева, другой справа от знака +
. Операции, которые требуют наличия двух операндов, называются бинарными. Если пропустить хотя бы один операнд, например, 3 + ;
, то программа завершится с синтаксической ошибкой.
Операции (не операторы) бывают не только бинарными, но и унарными (с одним операндом), и даже тернарными (с тремя операндами)! Причем операторы могут выглядеть одинаково, но обозначать разные операции.
console.log(-3); // => -3
Выше пример применения унарной операции к числу 3
. Оператор минус перед тройкой говорит интерпретатору взять число 3
и найти противоположное, то есть -3
.
Это немного может сбить с толку, потому что -3
— это одновременно и число само по себе, и оператор с операндом, но у языков программирования такая структура.
Коммутативная операция
Мы все помним со школы: «от перемены мест слагаемых сумма не меняется». Это один из базовых и интуитивно понятных законов арифметики, он называется коммутативным законом.
Бинарная операция считается коммутативной, если поменяв местами операнды, вы получаете тот же самый результат. Очевидно, что сложение — коммутативная операция: 3 + 2 = 2 + 3.
А вот является ли коммутативной операция вычитания? Конечно, нет: 2 - 3 ≠ 3 - 2. В программировании этот закон работает точно так же, как в арифметике.
Более того, большинство операций, с которыми мы будем сталкиваться в реальной жизни, не являются коммутативными. Отсюда вывод: всегда обращайте внимание на порядок того, с чем работаете.
Композиция операций
А что, если понадобится вычислить такое выражение: 3 * 5 - 2
? Именно так мы и запишем:
console.log(3 * 5 - 2); // => 13
Обратите внимание, что интерпретатор производит арифметические вычисления в правильном порядке: сначала деление и умножение, потом сложение и вычитание. Иногда этот порядок нужно изменить — об этом поговорим дальше. Или другой пример:
console.log(2 * 4 * 5 * 10);
Как видно, операции можно соединять друг с другом, получая возможность вычислять все более сложные составные выражения. Чтобы представить себе то, как происходят вычисления внутри интерпретатора, давайте разберем пример: 2 * 4 * 5 * 10
.
- Сначала вычисляется
2 * 4
и получается выражение8 * 5 * 10
. - Затем
8 * 5
. В итоге имеем40 * 10
. - В конце концов происходит последнее умножение, и получается результат
400
.
Таким образом, интерпретатор соединяет сложные составные выражения, последовательно выполняя заложенные в них арифметические действия, по умолчанию соблюдая правильный порядок: сначала умножение и деление, затем — сложение и вычитание.
Приоритет операций
Посмотрите внимательно на выражение 2 + 2 * 2
и посчитайте в уме ответ.
Правильный ответ: 6
. Если у вас получилось 8
, то этот раздел для вас. В школьной математике мы изучали понятие «приоритет операции». Приоритет определяет то, в какой последовательности должны выполняться операции. Например, умножение и деление имеют больший приоритет, чем сложение и вычитание, а приоритет возведения в степень выше всех остальных арифметических операций: 2 ** 3 * 2
вычислится в 16
.
Но нередко вычисления должны происходить в порядке, отличном от стандартного приоритета. В сложных ситуациях приоритет можно (и нужно) задавать круглыми скобками, точно так же, как в школе, например: (2 + 2) * 2
.
Скобки можно ставить вокруг любой операции. Они могут вкладываться друг в друга сколько угодно раз. Вот пара примеров:
console.log(3 ** (4 - 2)); // => 9
console.log(7 * 3 + (4 / 2) - (8 + (2 - 1))); // => 14
Иногда выражение сложно воспринимать визуально. Тогда можно расставить скобки, не повлияв на приоритет. Например:
Было:
console.log(8 / 2 + 5 - -3 / 2); // => 10.5
Стало:
console.log(((8 / 2) + 5) - (-3 / 2)); // => 10.5
https://replit.com/@hexlet/js-basics-arithmetics
Запомните: код пишется для людей, потому что код будут читать люди, а машины будут только исполнять его. Для машин код — или корректный, или не корректный, для них нет «более» понятного или «менее» понятного кода.
Дополнительные материалы

Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Урок «Как эффективно учиться на Хекслете»
- Вебинар «Как самостоятельно учиться»