Exception คือเหตุการณ์ผิดปกติที่ทำให้โปรแกรมไม่สามารถทำงานต่อได้ตามปกติ เช่น ข้อมูลไม่ถูกต้อง ไฟล์หาย การหารด้วยศูนย์ หรือการเชื่อมต่อระบบล้มเหลว
try-catch ใช้แยกโค้ดที่มีความเสี่ยงออกจากโค้ดจัดการข้อผิดพลาด ทำให้โปรแกรมตอบสนองต่อปัญหาได้อย่างควบคุมได้แทนที่จะหยุดทันที
Custom Exception ช่วยสร้างประเภทข้อผิดพลาดเฉพาะของระบบ ทำให้ข้อความและการจัดการปัญหาชัดเจนขึ้น
Logging ใช้บันทึกเหตุการณ์สำคัญและข้อผิดพลาด เพื่อช่วยในการวิเคราะห์ปัญหาและตรวจสอบย้อนหลัง
ปรับโปรแกรมอ่านไฟล์หรือรับข้อมูลผู้ใช้ให้มี Exception Handling และ Logging ที่เหมาะสม
ผู้เรียนแยกข้อผิดพลาดที่คาดการณ์ได้ เช่น input ไม่ถูกต้อง ออกจากข้อผิดพลาดที่เป็นเหตุการณ์ผิดปกติ เช่น ไฟล์เสียหายหรือการเชื่อมต่อล้มเหลว จากนั้นออกแบบการตอบสนองที่เหมาะสม เช่น แจ้งผู้ใช้ ลองใหม่ ใช้ค่าเริ่มต้น หรือหยุดการทำงานบางส่วนอย่างปลอดภัย
Logging ควรบันทึกข้อมูลที่ช่วยแก้ปัญหา เช่น เวลา จุดที่เกิดเหตุการณ์ ข้อความ error และข้อมูลบริบทที่ไม่ละเมิดความเป็นส่วนตัว ไม่ควรบันทึกรหัสผ่านหรือข้อมูลลับ
เพิ่ม Exception Handling ให้โปรแกรม File Processing โดยมี Custom Exception อย่างน้อย 1 ประเภทและมี log ของเหตุการณ์สำคัญ
Exception Handling คือการจัดการเหตุการณ์ผิดปกติให้โปรแกรมหยุดอย่างปลอดภัยหรือฟื้นตัวได้ แทนที่จะปล่อยให้โปรแกรมล้มโดยไม่อธิบายสาเหตุ
%%{init: {'theme': 'base', 'themeVariables': {'background': '#282828','primaryColor': '#3c3836','primaryTextColor': '#fbf1c7','primaryBorderColor': '#fabd2f','lineColor': '#fb4934','secondaryColor': '#504945','tertiaryColor': '#665c54'}}}%%
flowchart LR
A[Risky Code
โค้ดเสี่ยง] --> B{Error?
ผิดพลาดหรือไม่}
B -- No --> C[Continue
ทำงานต่อ]
B -- Yes --> D[Catch
จับ exception]
D --> E[Log
บันทึกเหตุการณ์]
E --> F[Recover/Stop
ฟื้นตัวหรือหยุดปลอดภัย]
#include <iostream>
#include <stdexcept>
using namespace std;
double divide(double a, double b) {
if (b == 0) {
throw runtime_error("division by zero");
}
return a / b;
}
int main() {
try {
cout << divide(10, 0) << endl;
} catch (const exception& e) {
cout << "Error: " << e.what() << endl; // expected: Error message
}
return 0;
}
| ส่วนประกอบ | หน้าที่ |
|---|---|
| try | ครอบโค้ดที่อาจผิดพลาด |
| throw | ส่ง exception |
| catch | จัดการ exception |
| log | บันทึกรายละเอียดเพื่อวิเคราะห์ย้อนหลัง |