การคืนค่าก่อนกำหนด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การแยกแขนง: if-else, นิพจน์สามส่วน, switch-case
- รูปแบบลูป: for, while, do-while
- ลูป for แบบอิงช่วงกับคอนเทนเนอร์
- การคืนค่าก่อนกำหนด break continue และ goto