0Pricing
C++ Academy · บทเรียน

การคืนค่าก่อนกำหนด break continue และ goto

ปรับโครงสร้างเงื่อนไขซ้อนด้วยการคืนค่าก่อนกำหนด และใช้ break, continue กับ goto อย่างเหมาะสม

การคืนค่าก่อนกำหนด break continue และ goto เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

พีระมิดแห่งความยุ่งยาก

เงื่อนไขที่ซ้อนกันลึกทำให้อ่านเข้าใจได้ยาก การคืนค่าก่อนกำหนดช่วยทำให้โครงสร้างแบนลงได้อย่างมาก

// Pyramid
int process(int n) {
    if (n >= 0) {
        if (n < 100) {
            if (isValid(n)) {
                return compute(n);
            }
        }
    }
    return -1;
}

ปรับโครงสร้างด้วยการคืนค่าก่อนกำหนด

ออกจากฟังก์ชันทันทีที่เงื่อนไขเบื้องต้นไม่ผ่าน แต่ละประโยคตรวจสอบจะเป็นบรรทัดเดียวที่ไม่ซ้อนกัน

int process(int n) {
    if (n < 0)      return -1;
    if (n >= 100)   return -1;
    if (!isValid(n)) return -1;
    return compute(n);
}

ประโยคตรวจสอบ

ประโยคตรวจสอบจะปฏิเสธข้อมูลเข้าที่ไม่ถูกต้องตั้งแต่ต้นฟังก์ชัน ทำให้เส้นทางกรณีปกติมองเห็นได้อย่างชัดเจน

break ในลูป

ออกจากลูปเมื่อพบสิ่งที่กำลังค้นหา หรือเมื่อเกิดข้อผิดพลาดจนการทำงานต่อไม่มีประโยชน์

continue: ข้ามส่วนที่เหลือ

ใช้ continue เพื่อข้ามกรณีที่ไม่เกี่ยวข้อง โดยไม่ต้องซ้อนส่วนที่เหลือของบล็อกคำสั่ง

for (auto& item : items) {
    if (item.skipped) continue;
    process(item);
}

การออกจากลูปที่ซ้อนกัน

break จะออกจากลูปเพียงหนึ่งระดับเท่านั้น หากต้องการออกหลายระดับ ให้ใช้ตัวแปรสถานะ แยกโค้ดเป็นฟังก์ชัน หรือใช้ goto เป็นทางเลือกสุดท้าย

bool found = false;
for (int i = 0; i < n && !found; ++i) {
    for (int j = 0; j < m; ++j) {
        if (grid[i][j] == target) {
            found = true;
            break;
        }
    }
}

คำสั่ง goto

C++ สืบทอด goto มาจากภาษา C โค้ดสมัยใหม่แทบไม่จำเป็นต้องใช้ แต่มีกรณีใช้งานที่สมเหตุสมผลอยู่หนึ่งกรณี คือการกระโดดออกจากลูปที่ซ้อนกันหรือเส้นทางจัดการข้อผิดพลาด

for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
        if (error_condition) goto cleanup;
    }
}

cleanup:
free_resources();

เหตุใดจึงไม่แนะนำให้ใช้ goto

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

ปรับโครงสร้างเพื่อเอา goto ออก

การใช้ goto ส่วนใหญ่สามารถแทนที่ได้ด้วย:

  • แยกบล็อกด้านในออกเป็นฟังก์ชัน
  • ใช้ตัวแปรสถานะ
  • โยนและดักจับข้อยกเว้น

return ในตัวทำลาย

คุณไม่สามารถคืนค่าก่อนกำหนดจากตัวทำลายด้วย return; ที่ด้านบนได้ — ตัวทำลายไม่คืนค่า แต่คุณสามารถจัดโครงสร้างด้วยเงื่อนไขก่อนกำหนดเพื่อข้ามงานบางส่วนได้

รูปแบบทางออกเดียว (แบบเก่า)

โค้ดรุ่นเก่าบางครั้งใช้ return เพียงจุดเดียวที่ด้านล่างและมีตัวแปรผลลัพธ์ ส่วน C++ สมัยใหม่สนับสนุนการคืนค่าก่อนกำหนดหลายจุดเพื่อความชัดเจน RAII จัดการการทำความสะอาดทรัพยากรโดยอัตโนมัติ

ตรวจสอบอย่างรวดเร็ว

เทคนิคการควบคุมลำดับการทำงานใดที่ใช้แทนสายโซ่ if-else ที่ซ้อนกันในฟังก์ชันได้อย่างสะอาดที่สุด

สรุปทบทวน

ใช้ การคืนค่าก่อนกำหนด เป็นประโยคตรวจสอบ ใช้ break และ continue เท่าที่จำเป็นเพื่อสื่อเจตนาให้ชัดเจน และใช้ goto เฉพาะการออกจากลูปที่ซ้อนกันหรือเส้นทางทำความสะอาดทรัพยากรที่พบได้ยาก เป้าหมายคือการควบคุมลำดับการทำงานที่อ่านง่ายและไม่ซ้อนกัน

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

บทเรียน “การคืนค่าก่อนกำหนด break continue และ goto” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การคืนค่าก่อนกำหนด break continue และ goto” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การคืนค่าก่อนกำหนด break continue และ goto”

ปรับโครงสร้างเงื่อนไขซ้อนด้วยการคืนค่าก่อนกำหนด และใช้ break, continue กับ goto อย่างเหมาะสม คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การคืนค่าก่อนกำหนด break continue และ goto” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การแยกแขนง: if-else, นิพจน์สามส่วน, switch-case
  2. รูปแบบลูป: for, while, do-while
  3. ลูป for แบบอิงช่วงกับคอนเทนเนอร์
  4. การคืนค่าก่อนกำหนด break continue และ goto
← กลับไปที่ C++ Academy