0Pricing
JavaScript Academy · Урок

E1 — вычислитель выражений (часть 1: + и - слева направо)

Реализуйте небольшой вычислитель, обрабатывающий + и - слева направо. Разберите цифры и операторы на токены, игнорируйте пробелы и добавьте простые защитные проверки

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

Что мы создадим

Цель: вычислять небольшие математические строки, используя только + и -.

  • Разбивать числа и операторы на токены
  • Игнорировать пробелы
  • Вычислять слева направо
  • Добавлять простые проверки ошибок
E1 — вычислитель выражений (часть 1: + и - слева направо) — иллюстрация 1

Разборщик токенов: числа и операторы

Разборщик токенов собирает числа из цифр и возвращает массив вроде [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"));
E1 — вычислитель выражений (часть 1: + и - слева направо) — иллюстрация 2

Вычисление 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]));
E1 — вычислитель выражений (часть 1: + и - слева направо) — иллюстрация 3

Безопасная оболочка

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

// 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"));
E1 — вычислитель выражений (часть 1: + и - слева направо) — иллюстрация 4

Запускайте небольшие 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
E1 — вычислитель выражений (часть 1: + и - слева направо) — иллюстрация 5

Рекомендации для начинающих

Советы:

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

Тест поведения LTR

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

E1 — вычислитель выражений (часть 1: + и - слева направо) — иллюстрация 7

Повторение

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

E1 — вычислитель выражений (часть 1: + и - слева направо) — иллюстрация 8

Часто задаваемые вопросы

Урок «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 — локальная установка не требуется.

Все уроки этого курса

  1. E1 — вычислитель выражений (часть 1: + и - слева направо)
  2. E2 — анализатор журналов (простые фильтры и счётчики)
  3. E3 — пул и очередь промисов (асинхронная параллельность)
← Назад к JavaScript Academy