JavaScript: Композиция операций
В JavaScript, как и в математике, можно объединять несколько операций в одну строку. Такие выражения интерпретатор обрабатывает шаг за шагом по определённым правилам.
Рассмотрим пример:
console.log(2 * 4 * 5 * 10);Этот код состоит из нескольких операций умножения, объединённых в одно выражение. Чтобы понять, как интерпретатор выполняет выражение, разберём его по этапам:
- Сначала вычисляется
2 * 4:8 * 5 * 10 - Затем
8 * 5:40 * 10 - И наконец
40 * 10:400
Итоговый результат составляет 400.
А если разные операции?
Всё просто, пока используются одинаковые операторы. Но что произойдёт, если объединить, например, умножение и сложение?
console.log(2 + 3 * 4);2 + 3 * 4
└─┬─┘
2 + 12
└──┬───┘
14Получится ли 20 или 14? Ответ: 14.
Это объясняется тем, что в JavaScript, как и в математике, у операций есть приоритет. Умножение выполняется раньше сложения, если не использовать скобки. Мы разберём это подробнее в уроке про приоритеты.
Примеры с вычитанием и отрицательными числами
То же правило работает и для вычитания:
console.log(10 - 2 * 3); // => 4Сначала выполняется умножение: 10 - 6 = 4.
Если же в выражении есть отрицательные числа, унарный минус применяется уже после возведения в степень:
console.log(-2 ** 2); // => -4, два в степени два, затем применяется минус
console.log(-2 * 5); // => -10, минус два умноженное на пять
console.log(4 + -2); // => 2
console.log(6 - -2); // => 8Во всех примерах, кроме первого, сначала вычисляется унарный минус (-2), и затем проводятся остальные операции.
Рассмотрим подробнее последний пример:
console.log(6 - -2); // => 8Сначала вычисляется унарный минус (-2), и затем операция превращается в 6 - (-2), что даёт 8. Это то же самое, что:
console.log(6 + 2); // => 8Что нужно запомнить
- Выражения могут состоять из нескольких операций.
- JavaScript вычисляет их поэтапно: слева направо, соблюдая приоритет операций.
- Скобки можно использовать, чтобы явно указать порядок вычислений.
Задание
Вы идёте в магазин за подарками: 3 книги по 200 рублей и 2 ручки по 30 рублей. Рассчитайте и выведите итоговую стоимость покупки.
3 * 200 + 2 * 30
↓ ↓
600 + 60 = 660JavaScript: Композиция операций
В JavaScript, как и в математике, можно объединять несколько операций в одну строку. Такие выражения интерпретатор обрабатывает шаг за шагом по определённым правилам.
Рассмотрим пример:
console.log(2 * 4 * 5 * 10);Этот код состоит из нескольких операций умножения, объединённых в одно выражение. Чтобы понять, как интерпретатор выполняет выражение, разберём его по этапам:
- Сначала вычисляется
2 * 4:8 * 5 * 10 - Затем
8 * 5:40 * 10 - И наконец
40 * 10:400
Итоговый результат составляет 400.
А если разные операции?
Всё просто, пока используются одинаковые операторы. Но что произойдёт, если объединить, например, умножение и сложение?
console.log(2 + 3 * 4);2 + 3 * 4
└─┬─┘
2 + 12
└──┬───┘
14Получится ли 20 или 14? Ответ: 14.
Это объясняется тем, что в JavaScript, как и в математике, у операций есть приоритет. Умножение выполняется раньше сложения, если не использовать скобки. Мы разберём это подробнее в уроке про приоритеты.
Примеры с вычитанием и отрицательными числами
То же правило работает и для вычитания:
console.log(10 - 2 * 3); // => 4Сначала выполняется умножение: 10 - 6 = 4.
Если же в выражении есть отрицательные числа, унарный минус применяется уже после возведения в степень:
console.log(-2 ** 2); // => -4, два в степени два, затем применяется минус
console.log(-2 * 5); // => -10, минус два умноженное на пять
console.log(4 + -2); // => 2
console.log(6 - -2); // => 8Во всех примерах, кроме первого, сначала вычисляется унарный минус (-2), и затем проводятся остальные операции.
Рассмотрим подробнее последний пример:
console.log(6 - -2); // => 8Сначала вычисляется унарный минус (-2), и затем операция превращается в 6 - (-2), что даёт 8. Это то же самое, что:
console.log(6 + 2); // => 8Что нужно запомнить
- Выражения могут состоять из нескольких операций.
- JavaScript вычисляет их поэтапно: слева направо, соблюдая приоритет операций.
- Скобки можно использовать, чтобы явно указать порядок вычислений.
Задание
Вы идёте в магазин за подарками: 3 книги по 200 рублей и 2 ручки по 30 рублей. Рассчитайте и выведите итоговую стоимость покупки.
3 * 200 + 2 * 30
↓ ↓
600 + 60 = 660Ваше упражнение проверяется по этим тестам
// @ts-check
import { expect, test, vi } from 'vitest';
test('composition', async () => {
const consoleLogSpy = vi.spyOn(console, 'log');
await import('./index.js');
const firstArg = consoleLogSpy.mock.calls.join('\n');
expect(firstArg).toBe('660');
});Решение учителя откроется через:
20:00
