E1 — вычислитель выражений (часть 1: + и - слева направо)
Реализуйте небольшой вычислитель, обрабатывающий + и - слева направо. Разберите цифры и операторы на токены, игнорируйте пробелы и добавьте простые защитные проверки
«E1 — вычислитель выражений (часть 1: + и - слева направо)» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 3 уроков всего.
Что мы создадим
Цель: вычислять небольшие математические строки, используя только + и -.
- Разбивать числа и операторы на токены
- Игнорировать пробелы
- Вычислять слева направо
- Добавлять простые проверки ошибок

Разборщик токенов: числа и операторы
Разборщик токенов собирает числа из цифр и возвращает массив вроде [12, "+", 3, "-", 4].
// Tokenize: split into numbers and operators; ignore spaces
function tokenize(expr) {
if (typeof expr !== "string") return null;
const tokens = [];
let num = "";
for (let i = 0; i < expr.length; i = i + 1) {
const ch = expr[i];
if (ch === " ") {
// skip spaces
continue;
}
if (ch >= "0" && ch <= "9") {
// build number
num = num + ch;
} else if (ch === "+" || ch === "-") {
// flush pending number
if (num.length > 0) {
tokens.push(Number(num));
num = "";
}
tokens.push(ch);
} else {
// unsupported character
return null;
}
}
if (num.length > 0) tokens.push(Number(num));
return tokens;
}
console.log("tokens:", tokenize("12 + 3 - 4"));
Вычисление LTR (+/-)
Вычисляйте слева направо. Пока мы не обрабатываем приоритет операций и скобки.
// Evaluate tokens left-to-right for + and - only
function evalPlusMinus(tokens) {
if (!Array.isArray(tokens) || tokens.length === 0) return null;
// result starts with first number
let acc = tokens[0];
if (typeof acc !== "number") return null;
// step through [op, num] pairs
for (let i = 1; i < tokens.length; i = i + 2) {
const op = tokens[i];
const val = tokens[i + 1];
if ((op !== "+" && op !== "-") || typeof val !== "number") {
return null;
}
if (op === "+") acc = acc + val;
else acc = acc - val;
}
return acc;
}
console.log("eval 10-3-2:", evalPlusMinus([10, "-", 3, "-", 2]));
Безопасная оболочка
Создайте безопасную оболочку, которая возвращает либо значение, либо небольшую строку с ошибкой, понятную начинающим.
// Glue the pieces: from string to result
function evalExprSimple(expr) {
const tokens = tokenize(expr);
if (tokens === null) {
return { ok: false, error: "Invalid character" };
}
const result = evalPlusMinus(tokens);
if (typeof result !== "number") {
return { ok: false, error: "Invalid sequence" };
}
return { ok: true, value: result };
}
console.log("12 + 3 - 4 =", evalExprSimple("12 + 3 - 4"));
console.log("bad char =", evalExprSimple("2 + a"));

Запускайте небольшие cases
Делайте примеры небольшими. В следующих частях мы добавим приоритет операций, скобки и унарный минус.
// A few quick checks
const cases = [
"0-3",
"7+5",
"10-3-2",
"2 + 2 + 2",
"9 - 1 + 1"
];
for (const c of cases) {
const r = evalExprSimple(c);
console.log(c, "=>", r.ok ? r.value : r.error);
}
// Note: unary minus (like "-3+2") not handled yet
// This simple version expects a number first

Рекомендации для начинающих
Советы:
- Начните с небольшой области применения (только + и -).
- Возвращайте небольшие сообщения об ошибках, вместо того чтобы выбрасывать исключения.
- Пишите небольшие вспомогательные методы (для разбиения на токены и вычисления).
- Добавляйте возможности постепенно.

Тест поведения LTR
Быстрая проверка: результат вычисления слева направо.

Повторение
Повторение: разбивайте числа и +/− на токены, игнорируйте пробелы и вычисляйте слева направо. Возвращайте небольшие сообщения об ошибках. Далее: приоритет операций и скобки.

Часто задаваемые вопросы
Урок «E1 — вычислитель выражений (часть 1: + и - слева направо)» бесплатный?
Да — полный текст урока «E1 — вычислитель выражений (часть 1: + и - слева направо)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «E1 — вычислитель выражений (часть 1: + и - слева направо)»?
Реализуйте небольшой вычислитель, обрабатывающий + и - слева направо. Разберите цифры и операторы на токены, игнорируйте пробелы и добавьте простые защитные проверки Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать JavaScript Academy?
Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «E1 — вычислитель выражений (часть 1: + и - слева направо)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке JavaScript Academy?
Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- E1 — вычислитель выражений (часть 1: + и - слева направо)
- E2 — анализатор журналов (простые фильтры и счётчики)
- E3 — пул и очередь промисов (асинхронная параллельность)