Rust – Lỗi Exception


Được đăng vào ngày 28/11/2017 | 0 bình luận

Nếu bạn đã từng học các ngôn ngữ lập trình phổ biến như Java, C#.. thì chắc hẳn bạn cũng đã biết về khái niệm lỗi Exceptionlỗi ngoại lệ. Đây là các lỗi chỉ xảy ra trong quá trình chạy các chương trình chứ không thể nào biết trước được như lỗi sai cú pháp, và đây cũng là loại lỗi khó tìm nhất.

Ví dụ phổ biến nhất cho người mới tìm hiểu về lỗi ngoại lệ là ví dụ về phép chia cho 0. Chẳng hạn như chúng ta viết một chương trình máy tính bỏ túi có thực hiện phép chia, thì nếu chúng ta không kiểm tra mẫu số có bằng 0 hay không, chương trình sẽ báo lỗi khi người dùng nhập số 0, trong một số trường hợp thì chương trình sẽ bị crash.

fn main() {
let x = 3;
let y = 0;
println!("{} / {} = {}", x, y, x / y);
}

Khi đó Rust sẽ dừng toàn bộ các đoạn code phía sau đó và in một câu thông báo lỗi như sau:

thread 'main' panicked at 'attempt to divide by zero'

Panic

Panic là một hàm trong Rust cho phép chúng ta in câu thông báo lỗi, ví dụ về cách sử dụng như sau:

fn main() {
let x = 2017;
let y = 0;
if(y == 0) {
panic!("y cannot be zero");
}
println!("{} / {} = {}", x, y, x / y);
}

Hàm panic!() sẽ dừng chương trình lại và in một dòng thông báo lỗi lên màn hình, các câu lệnh phía sau cũng sẽ không được thực hiện nữa.

thread 'main' panicked at 'y cannot be zero', src\main.rs:5:8

Ngoài ra Rust cũng có nhiều hàm khác như assert!(), assert_qe!()… ví dụ

fn main() {
let x =2017;
assert!(x == 9999);
assert_eq!(x, 9999);

let site = "phocode.com";
assert!(site =="micode.com", "The site’s name is incorrect");
}

Hàm assert!() nhận vào tham số đầu tiên là một giá trị true/false hoặc một biểu thức tính ra true/false. Nếu giá trị là false thì hàm này sẽ thực hiện panic!() ngay tại vị trí đó, ngoài ra chúng ta cũng có thể truyền thêm tham số thứ 2 để chỉ rõ vị trí trong phần thông báo lỗi hơn.

Hàm assert_eq!() thì nhận vào 2 tham số và so sánh 2 tham số đó có bằng nhau hay không.

Các hàm assert!()assert_eq!() trên sẽ lần lượt cho ra câu thông báo lỗi như sau nếu có:

thread 'main' panicked at 'assertion failed: x == 9999'
thread 'main' panicked at 'assertion failed: `(left == right)`
 left: `2017`,
 right: `9999`'
thread 'main' panicked at 'The site's name is incorrect'

Các hàm assert!() kiểu này thường được dùng để viết unit test. Chúng ta sẽ tìm hiểu sau.

Được đăng vào ngày 28/11/2017