JavaScript Academy · Lekcja

E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej)

Implementacja niewielkiego ewaluatora obsługującego + i - od lewej do prawej. Tokenizacja cyfr i operatorów, ignorowanie spacji oraz dodanie prostych zabezpieczeń

Lekcja 1 z 38 kroki

E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co utworzymy

Cel: obliczać wartości z krótkich ciągów matematycznych zawierających wyłącznie + i -.

  • Tokenizowanie liczb i operatorów
  • Ignorowanie spacji
  • Obliczanie od lewej do prawej
  • Dodanie prostych zabezpieczeń przed błędami
E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) — ilustracja 1

Tokenizer: liczby i operatory

Tokenizer tworzy liczby z cyfr i zwraca tablicę w rodzaju [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 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) — ilustracja 2

Obliczanie od lewej do prawej (+/-)

Obliczenia są wykonywane od lewej do prawej. Na razie nie obsługujemy kolejności działań ani nawiasów.

// 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 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) — ilustracja 3

Bezpieczna otoczka

Należy utworzyć bezpieczną otoczkę, która zwraca wartość albo krótki komunikat o błędzie zrozumiały dla początkujących.

// 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 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) — ilustracja 4

Uruchamianie małych przypadków

Przykłady powinny być małe. W kolejnych częściach dodamy kolejność działań, nawiasy i jednoargumentowy minus.

// 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 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) — ilustracja 5

Wskazówki dla początkujących

Wskazówki:

  • Należy zacząć od małego zakresu (+ i -).
  • Zamiast zgłaszać wyjątki należy zwracać krótkie komunikaty o błędach.
  • Należy pisać małe funkcje pomocnicze (tokenize, eval).
E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) — ilustracja 6

Quiz z obliczania od lewej do prawej

Szybkie sprawdzenie: wynik obliczania od lewej do prawej.

E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) — ilustracja 7

Podsumowanie

Podsumowanie: należy tokenizować liczby i symbole +/-, ignorować spacje oraz obliczać wynik od lewej do prawej. Należy zwracać krótkie komunikaty o błędach. Następny temat: kolejność działań i nawiasy.

E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej) — ilustracja 8
Bezpłatny start

Ucz się JavaScript dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
59
Lekcje
200

Często zadawane pytania

Czy lekcja „E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej)” jest bezpłatna?

Tak — pełny tekst „E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej)”?

Implementacja niewielkiego ewaluatora obsługującego + i - od lewej do prawej. Tokenizacja cyfr i operatorów, ignorowanie spacji oraz dodanie prostych zabezpieczeń Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.

Ile czasu zajmuje lekcja „E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej)
  2. E2 — analizator logów (proste filtry i liczniki)
  3. E3 — pula/kolejka Promise (asynchroniczna współbieżność)
← Powrót do JavaScript Academy