E1 — 式評価器(パート1:+と-の左から右への処理)
+と-を左から右へ処理する小さな評価器を実装します。数字と演算子をトークン化し、空白を無視して、簡単なガードを追加します。
「E1 — 式評価器(パート1:+と-の左から右への処理)」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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"));
左から右に評価(+/-)
左から右に計算します。まだ演算子の優先順位や括弧には対応しません。
// 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"));

小さなケースを実行する
例は小さく保ちます。後のパートで、優先順位、括弧、単項マイナスを追加します。
// 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

初心者向けガイド
ヒント:
- まずは小さな範囲(+と-だけ)から始めます。
- 例外を投げる代わりに小さなエラーを返します。
- 小さなヘルパー(tokenize、eval)を作成します。
- 機能を段階的に追加します。

左から右の動作クイズ
クイックチェック: 左から右に計算した結果を確認します。

まとめ
まとめ: 数値と+/-をトークン化し、空白を無視して、左から右に評価します。小さなエラーを返します。次は、優先順位と括弧です。

よくある質問
「E1 — 式評価器(パート1:+と-の左から右への処理)」レッスンは無料ですか?
はい。「E1 — 式評価器(パート1:+と-の左から右への処理)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全3レッスンが含まれています。
「E1 — 式評価器(パート1:+と-の左から右への処理)」で何を学びますか?
+と-を左から右へ処理する小さな評価器を実装します。数字と演算子をトークン化し、空白を無視して、簡単なガードを追加します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
JavaScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「E1 — 式評価器(パート1:+と-の左から右への処理)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJavaScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- E1 — 式評価器(パート1:+と-の左から右への処理)
- E2 — ログアナライザー(簡単なフィルターとカウンター)
- E3 — Promiseプール/キュー(非同期コンカレンシー)