E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)
สร้างตัวประเมินขนาดเล็กที่รองรับ + และ - จากซ้ายไปขวา แบ่งตัวเลขและตัวดำเนินการเป็นโทเค็น ไม่สนใจช่องว่าง และเพิ่มตัวตรวจเงื่อนไขอย่างง่าย
E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR) เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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"));
ประเมินจากซ้ายไปขวา (+/-)
คำนวณจากซ้ายไปขวา ขณะนี้ยังไม่รองรับลำดับความสำคัญหรือวงเล็บ
// 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: + และ - แบบ LTR)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)”
สร้างตัวประเมินขนาดเล็กที่รองรับ + และ - จากซ้ายไปขวา แบ่งตัวเลขและตัวดำเนินการเป็นโทเค็น ไม่สนใจช่องว่าง และเพิ่มตัวตรวจเงื่อนไขอย่างง่าย คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน
บทเรียน “E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม
ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)
- E2 — ตัววิเคราะห์บันทึก (ตัวกรองและตัวนับอย่างง่าย)
- E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)