0Pricing
JavaScript Academy · บทเรียน

E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)

สร้างตัวประเมินขนาดเล็กที่รองรับ + และ - จากซ้ายไปขวา แบ่งตัวเลขและตัวดำเนินการเป็นโทเค็น ไม่สนใจช่องว่าง และเพิ่มตัวตรวจเงื่อนไขอย่างง่าย

E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR) เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

สิ่งที่จะสร้าง

เป้าหมาย: ประเมินสตริงคณิตศาสตร์ขนาดเล็กที่ใช้เฉพาะ + และ -

  • แบ่งตัวเลขและตัวดำเนินการเป็นโทเค็น
  • ไม่สนใจช่องว่าง
  • คำนวณจากซ้ายไปขวา
  • เพิ่มการป้องกันข้อผิดพลาดอย่างง่าย
E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR) — ภาพประกอบ 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: + และ - แบบ LTR) — ภาพประกอบ 2

ประเมินจากซ้ายไปขวา (+/-)

คำนวณจากซ้ายไปขวา ขณะนี้ยังไม่รองรับลำดับความสำคัญหรือวงเล็บ

// 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: + และ - แบบ LTR) — ภาพประกอบ 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: + และ - แบบ LTR) — ภาพประกอบ 4

เรียกใช้กรณีขนาดเล็ก

ทำตัวอย่างให้เล็กไว้ก่อน เราจะเพิ่มลำดับความสำคัญ วงเล็บ และเครื่องหมายลบหน้าค่าในส่วนถัดไป

// 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: + และ - แบบ LTR) — ภาพประกอบ 5

คำแนะนำสำหรับผู้เริ่มต้น

เคล็ดลับ:

  • เริ่มจากขอบเขตขนาดเล็ก (+ และ - เท่านั้น)
  • ส่งคืนข้อผิดพลาดขนาดเล็กแทนการโยนข้อผิดพลาด
  • เขียนตัวช่วยขนาดเล็ก (tokenize, eval)
  • เพิ่มความสามารถทีละขั้น
E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR) — ภาพประกอบ 6

แบบทดสอบพฤติกรรมจากซ้ายไปขวา

ตรวจสอบอย่างรวดเร็ว: ผลลัพธ์จากซ้ายไปขวา

E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR) — ภาพประกอบ 7

ทบทวน

ทบทวน: แบ่งตัวเลขและ +/- เป็นโทเค็น ไม่สนใจช่องว่าง และประเมินจากซ้ายไปขวา ส่งคืนข้อผิดพลาดขนาดเล็ก ขั้นถัดไป: ลำดับความสำคัญและวงเล็บ

E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR) — ภาพประกอบ 8

คำถามที่พบบ่อย

บทเรียน “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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)
  2. E2 — ตัววิเคราะห์บันทึก (ตัวกรองและตัวนับอย่างง่าย)
  3. E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)
← กลับไปที่ JavaScript Academy