JavaScript
Control Flow
break / continue
เรียนรู้ break (หยุด loop ทันที) และ continue (ข้ามรอบปัจจุบัน) เพื่อควบคุม flow ของ loop ได้ละเอียดขึ้น พร้อม Lab ฝึกใช้งานทั้งสองแบบ
1. break และ continue คืออะไร
break และ continue เป็น keywords ที่ควบคุมการทำงานของ loop จากภายใน: • break — หยุด loop ทันที ออกจาก loop เลย ไม่รอให้ condition เป็น false • continue — ข้ามโค้ดที่เหลือในรอบนี้ แล้วไปเริ่มรอบถัดไปทันที ทั้งสองใช้กับ loop ทุกประเภท — ในบทนี้เราฝึกกับ for loop เป็นหลัก ส่วน while และ do...while จะได้เห็นในบทถัดไป ใช้ break เมื่อ: เจอคำตอบแล้วต้องการหยุดทันที ไม่ต้องรอให้ loop วิ่งจนครบ ใช้ continue เมื่อ: ต้องการข้ามบางรอบที่ไม่ตรงเงื่อนไข แต่ยังอยากให้ loop วิ่งต่อจนครบ
2. break — หยุด loop ทันที
break หยุด loop ทั้งก้อนทันที — รอบที่เหลือทั้งหมดจะไม่ถูกรัน
เมื่อเจอ break → ออกจาก loop ทันที ไม่ตรวจรอบถัดไปอีก
let foundRound = -1;
for (let round = 1; round <= 10; round++) {
if (round === 4) {
foundRound = round;
break; // เจอรอบที่ต้องการแล้ว หยุดทันที
}
}
console.log("เจอรอบ", foundRound); // เจอรอบ 4ขั้นตอนการทำงาน: 1. รอบ 1–3 → ตรวจ if (round === 4) → false → ไม่ทำ break → ไปรอบถัดไป 2. รอบ 4 → ตรวจ if (round === 4) → true → เก็บค่า → break → ออกจาก loop ทันที 3. รอบ 5–10 → ไม่ถูกรันเลย ข้อดีของ break: เราหยุดได้ทันทีเมื่อได้คำตอบแล้ว ไม่ต้องปล่อยให้ loop วิ่งจนครบ — ประหยัดเวลามากเมื่อข้อมูลมีขนาดใหญ่
3. continue — ข้ามรอบนี้ ไปรอบถัดไป
continue ข้ามเฉพาะรอบนี้ — loop ยังวิ่งต่อจนครบ
เมื่อเจอ continue → ข้ามโค้ดที่เหลือในรอบนี้ ไปเริ่มรอบถัดไปทันที
for (let number = 1; number <= 10; number++) {
if (number % 2 !== 0) {
continue; // เลขคี่ → ข้ามโค้ดที่เหลือในรอบนี้
}
console.log(number);
}
// 2, 4, 6, 8, 10ขั้นตอนการทำงาน: 1. รอบ 1: number = 1 → 1 % 2 !== 0 → true → continue → ข้าม console.log → ไปรอบ 2 2. รอบ 2: number = 2 → 2 % 2 !== 0 → false → ไม่ทำ continue → console.log(2) 3. รอบ 3: number = 3 → เป็นเลขคี่ → continue → ข้าม 4. ดำเนินต่อไปแบบนี้จนครบ 10 รอบ continue ไม่ได้หยุด loop — แค่ข้ามโค้ดในรอบนั้นแล้วไปรอบถัดไป loop ยังวิ่งจนครบ condition
4. ใช้ break และ continue ร่วมกัน
ในทางปฏิบัติ เรามักใช้ทั้ง break และ continue ร่วมกันเพื่อกรองข้อมูลและหยุดเมื่อเจอคำตอบ: • continue → กรองค่าที่ไม่ต้องการออก • break → หยุดทันทีเมื่อเจอคำตอบแรกที่ผ่านการกรอง
ข้ามเลขคี่ ข้ามค่าที่ไม่ถึงเกณฑ์ แล้วหยุดเมื่อเจอเลขคู่ตัวแรกที่ > 6
let firstValidNumber = null;
for (let number = 1; number <= 12; number++) {
if (number % 2 !== 0) continue; // ข้ามเลขคี่
if (number <= 6) continue; // ข้ามเลขคู่ที่ยังไม่ถึงเกณฑ์
firstValidNumber = number;
break; // เจอเลขคู่ตัวแรกที่มากกว่า 6 แล้ว หยุด
}
console.log(firstValidNumber); // 8ลำดับการทำงาน: 1. รอบ 1–6: เป็นเลขคี่ (continue) หรือเป็นเลขคู่แต่ ≤ 6 (continue) → ถูกข้ามทั้งหมด 2. รอบ 7: เลขคี่ → continue 3. รอบ 8: เลขคู่ และ > 6 → เก็บค่า → break → หยุด 4. รอบ 9–12: ไม่ถูกรัน การใช้ continue ก่อน break เป็น pattern ที่ใช้บ่อย: "กรองค่าที่ไม่ต้องการออกด้วย continue แล้วหยุดด้วย break เมื่อเจอคำตอบ"
5. ข้อควรระวัง
- break จะหยุดเฉพาะ loop ชั้นในสุด — ถ้าอยู่ใน nested loop break จะไม่หยุด loop ชั้นนอก
- เมื่อตั้งใจให้ loop วนไม่รู้จบ ต้องมั่นใจว่ามี `break` ในทุกเส้นทางที่โค้ดอาจวิ่งไปถึง — ไม่เช่นนั้นเกิด infinite loop
- continue ต้องอยู่ก่อนโค้ดที่ต้องการข้าม — ถ้าวางผิดตำแหน่งจะไม่มีผล
- `break` ใน `switch` ใช้เพื่อจบแต่ละ case — อย่าสับสนกับ `break` ใน loop ซึ่งใช้หยุด loop ทั้งก้อน
เมื่อมี nested loop break จะหยุดเฉพาะ loop ที่อยู่ใกล้ที่สุด ส่วน loop นอกยังทำงานต่อ
for (let outer = 1; outer <= 3; outer++) {
for (let inner = 1; inner <= 5; inner++) {
if (inner === 3) {
break; // หยุดเฉพาะ inner loop → ไป outer รอบถัดไป
}
console.log("outer", outer, "inner", inner);
}
}
// outer 1 inner 1
// outer 1 inner 2
// outer 2 inner 1
// outer 2 inner 2
// outer 3 inner 1
// outer 3 inner 2สังเกตว่า break หยุดเฉพาะ inner loop (หยุดที่ inner = 3) — แต่ outer loop ยังวิ่งต่อจนครบ 3 รอบ ถ้าต้องการหยุด outer loop ด้วย ต้องใช้ labeled break หรือตรวจสอบเงื่อนไขซ้ำใน outer loop ด้วย