Xử lí lỗi ngoại lệ

Một phần của tài liệu Free Pascal: Yes, Turbo Pascal: No! (Trang 27 - 28)

Phần lớn các ngôn ngữ lập trình cao cấp đều có hỗ trợ xử lí lỗi ngoại lệ. Chẳng hạn Visual Basic có lệnh On Error, C++, Java có nhóm lệnh try catch, Delphi, FP có nhóm lệnh try... except. Nói một cách đơn giản là: trong khi phương pháp xử lí lỗi truyền thống né tránh lỗi (tức là kiểm tra trước để đảm bảo không có lỗi thì mới làm) thì phương pháp lập trình xử lí lỗi ngoại lệ là thực hiện bình thường và dự phòng trước tình huống nếu gặp lỗi.

Chúng ta có thể xét một ví dụ là thực hiện một phép chia biến a cho biến b. Trong TP ta sẽ viết như sau:

if b <> 0 then c := a/b else write ('Error: b=0.');

Trong FP, sử dụng tính năng xử lí lỗi ngoại lệ, chúng ta có thể viết như sau: try c := a/b; except on EDivByZero do begin c := 0; write('Error.'); end; end;

Các bạn có thể nói: như vậy rõ ràng phức tạp, rắc rối hơn. Tất nhiên, tôi đồng ý. Nhưng hãy nhìn vào ưu điểm của phương pháp xử lí lỗi ngoại lệ so với phương pháp truyền thống: - Phương pháp kiểm tra không phải lúc nào cũng lường trước được mọi tình huống và thường phải thực hiện những phép kiểm tra rất tốn thời gian. Phương pháp xử lỗi ngoại lệ không cần những kiểm tra như vậy nên đơn giản hơn. Hơn nữa có những tình huống phải thực hiện rồi mới biết là có lỗi (chẳng hạn đọc file, cộng 2 số..) - Phương pháp truyền thống xử lí lỗi một cách không thống nhất: ở mức nào của chương trình bạn cũng phải có những đoạn trình xử lí riêng và mỗi lỗi cũng phải có đoạn trình xử lí riêng. Với phương pháp xử lí lỗi ngoại lệ ta có thể chủ động đưa lỗi lên mức xử lí cao nhất, thậm chí tự gây ra lỗi để chuyển quyền điều khiển (bằng lệnh raise).

- Phương pháp truyền thống sau khi gặp lỗi thường rất khó phục hồi lỗi. Phương pháp xử lí lỗi ngoại lệ có nhóm lệnh try finally sẽ đảm bảo dù gặp lỗi hay không những lệnh của khối finally đều được thực hiện.

Phương pháp xử lí lỗi ngoại lệ là phương pháp rất hay nhưng không thể trình bày đơn giản trong một đoạn báo ngắn được. Các bạn nếu thấy thú vị thì có thể tự tìm hiểu trong các tài liệu của FP, Delphi hay Java.

Như vậy qua một loạt bài báo, tôi đã trình bày về những điểm mạnh của FP so với TP, dưới góc độ một môi trường lập trình dành cho học sinh phổ thông hay sinh viên đại học làm quen lập trình hoặc rèn luyện chuẩn bị cho các kì thi HSG hay Olympic. Tất nhiên FP còn rất nhiều điểm mạnh khác như lập trình hướng đối tượng (OOP), đa nhiệm, đa luồng và đa nền (multi process - multi thread - multi platform), hỗ trợ trao tác CSDL và lập trình mạng nhưng đó là những lợi thế trong lập trình chuyên nghiệp, tạm thời chúng ta chưa xét đến.

thuyết phục để dùng FP thay thế TP:

- Không hạn chế bộ nhớ hay kích thước kiểu dữ liệu (mảng, xâu).

- Hàm có nhiều cải tiến: trả lại kết quả kiểu cấu trúc, định nghĩa hàm trùng tên, định nghĩa phép toán, cho phép dùng tên hàm như biến, dùng biến result hoặc lệnh exit để trả lại kết quả.

- Kiểu mảng mở và kiểu con trỏ uyển chuyển hơn, cho phép dùng con trỏ như mảng động. - Hỗ trợ các chế độ đồ hoạ cao cấp.

- Cho phép lập trình xử lí lỗi ngoại lệ.

- Tương thích hoàn toàn TP, cả về mã lệnh hay giao diện IDE. Sinh mã 32 bit tối ưu nên tốc độ nhanh hơn TP rất nhiều lần. Hơn nữa FP có thể sinh mã cho nhiều hệ máy và hệ điều hành khác nhau.

Và một điều rất quan trọng là FP là phần mềm nguồn mở, hoàn toàn miễn phí. Khi luật bản quyền ở Việt Nam được thực thi nghiêm túc, Linux sẽ trở nên phổ biến và việc sử dụng các môi trường lập trình cao cấp như .NET, Java và HĐH Windows sẽ phải trả tiền bản quyền. Khi đó thành thạo FP sẽ là một lợi thế.

Một phần của tài liệu Free Pascal: Yes, Turbo Pascal: No! (Trang 27 - 28)