×

Ném ngoại lệ với từ khóa throw trong C++

Trong lập trình C++, từ khóa "throw" là một phần quan trọng trong cơ chế xử lý ngoại lệ. Ngoại lệ là một cơ chế mà theo đó hàm xử lý lỗi trong chương trình có thể tách biệt mã xử lý bật lên từ mã xử lý sự cố thực tế, giúp làm cho mã nguồn dễ đọc và linh hoạt hơn.

Khi một lỗi xảy ra trong chương trình, thay vì kết thúc hoặc xử lý lỗi ngay tại vị trí đó, ta có thể sử dụng từ khóa "throw" để báo hiệu rằng một ngoại lệ đã xảy ra. Khi từ khóa này được thực thi, trình biên dịch sẽ tìm kiếm một khối lệnh xử lý ngoại lệ (khối "try-catch") phù hợp để bắt kịp và xử lý lỗi.

Dưới đây là một ví dụ đơn giản minh họa cách sử dụng từ khóa "throw":

#include <iostream>
using namespace std;

void chia(int a, int b) {
    if (b == 0) {
        throw "Lỗi: Chia cho 0 không hợp lệ!";
    } else {
        cout << "Kết quả: " << a / b << endl;
    }
}

int main() {
    try {
        chia(10, 0);
    } catch (const char* e) {
        cout << e << endl;
    }
    return 0;
}

Trong ví dụ trên, hàm chia sẽ kiểm tra nếu giá trị của biến b là 0. Nếu đúng, nó sẽ ném (throw) một chuỗi thông báo lỗi. Khối try trong hàm main sẽ bắt (catch) ngoại lệ này và in thông báo lỗi ra màn hình.

Ngoài ra, từ khóa "throw" không chỉ được sử dụng để ném ngoại lệ mà còn có thể ném bất kỳ loại đối tượng nào. Ví dụ:

#include <iostream>
#include <stdexcept>
using namespace std;

void kiemTraSoAm(int n) {
    if (n < 0) {
        throw invalid_argument("Lỗi: Tham số âm!");
    } else {
        cout << "Giá trị: " << n << endl;
    }
}

int main() {
    try {
        kiemTraSoAm(-5);
    } catch (const invalid_argument& e) {
        cout << e.what() << endl;
    }
    return 0;
}

Trong ví dụ này, thay vì ném một chuỗi thông báo đơn giản, ta ném một đối tượng thuộc lớp invalid_argument. Khi bắt được ngoại lệ này, hàm what() của đối tượng sẽ cung cấp thông tin chi tiết về lỗi.

Cơ chế ngoại lệ này giúp cho việc quản lý và xử lý lỗi trở nên dễ dàng hơn, đồng thời giữ cho mã nguồn rõ ràng và dễ bảo trì. Việc tách xử lý lỗi ra khỏi luồng điều khiển chính của chương trình giúp ta tập trung vào logic chính của ứng dụng mà không bị phân tâm bởi các trường hợp ngoại lệ có thể xảy ra.

Tóm lại, từ khóa "throw" đóng vai trò quan trọng trong lập trình C++ khi muốn sử dụng cơ chế xử lý ngoại lệ. Nó giúp quản lý lỗi hiệu quả và làm cho mã nguồn chương trình dễ hiểu và bảo trì hơn.

Comments