Bài 15 : Xử lý biệt lệ trong Kotlin

Loạt bài từ blog của mod @duythanhcse

Tại sao phải xử lý biệt lệ?

Trong quá trình thực thi phần mềm sẽ có những lỗi phát sinh mà trong quá trình coding ta đã dự đoán hoặc chưa dự đoán được

Việc kiểm soát các biệt lệ giúp cho phần mềm tiếp tục hoạt động nếu lỗi xảy ra hoặc cũng đưa ra các gợi ý bên phía User Problem

Khi lập trình thường chúng ta gặp 3 cấp độ lỗi:

  • Lỗi biên dịch (mới học lập trình, viết đâu sai đó… rất đáng thương)
  • Lỗi runtime exception (học lập trình chưa thông, chạy lên báo lỗi om sòm)
  • Lỗi logic exception – sai nghiệp vụ yêu cầu (đã thành lập trình viên, gặp những lỗi khó sửa)
    Và khi gặp lỗi thì thường có 2 hành vi với lỗi: Không quan tâm (Unchecked error) và quan tâm(Checked error)

Để hướng tới lập trình viên chuyên nghiệp thì ta cần quan tâm tới những lỗi này, phải kiểm tra cẩn thận để khi có gặp lỗi xảy ra thì chương trình vẫn tiếp tục mà không bị tắt ngang.

Kotlin hỗ trợ chúng ta cú pháp tổng quát để xử lý biệt lệ như sau:

Ví dụ 1: Viết chương trình chia 2 số a và b. Chủ ý cho mẫu số =0 để sinh ra lỗi

fun main(args: Array<String>) {
try {
var a:Int=5
var b:Int=0;
var c=a/b
println("$a/$b=$c")
}
catch (e:Exception)
{
println(e.message)
}
finally {
println("Đây là finally, 100% chạy, cho dù lỗi hay không")
}
}

Khi chạy đoạn lệnh ở trên thì đến dòng a/b sẽ sinh ra lỗi và nó nhảy vào exception, sau đó finally sẽ được thực hiện:

Ngoài ra Kotlin cũng hỗ trợ từ khóa throws để ném lỗi này ra nơi khác, những chỗ nào gọi nó sẽ xử lý lỗi này.

Ví dụ 2:

fun chia(a:Int,b:Int):Int
{
if(b==0)
throw Exception("Mẫu số =0")
return a/b
}
fun main(args: Array<String>) {
chia(5,0)
println("Cám ơn!")
}

Khi chạy chương trình ở ví dụ 2 lên thì nó sẽ xuất ra thông báo lỗi: Mẫu số =0 và tắt ngang phần mềm, không cho dòng chữ “Cám ơn”có cơ hội xuất hiện. VÌ lúc này ta chưa dùng try…catch để checked error:

Ta sửa lại mã lệnh ở trên để khi có lỗi xảy ra thì chương trình vẫn tiếp tục hoạt động:

Ví dụ 3:

fun chia(a:Int,b:Int):Int
{
if(b==0)
throw Exception("Mẫu số =0")
return a/b
}
fun main(args: Array<String>) {
try {
chia(5, 0)
}
catch (e:Exception)
{
println(e.message)
}
println("Cám ơn!")
}

Khi có try … catch thì cho dù có lỗi xảy ra, chương trình vẫn tiếp tục thực hiện các lệnh còn lại (tránh tắt ngang phần mềm), chương trình trên khi chạy sẽ có kết quả:

Như vậy tới đây Tui đã hướng dẫn xong xử lý biệt lệ trong Kotlin, các bạn chú ý học kỹ và hiểu được nó thông qua các ví dụ ở trên nhé. Đặc biệt nắm được cách thức vận hành của try…catch…finally…throw để có thể áp dụng tốt vào các dự án thực tế của mình.

Các bạn có thể tải source code bài này ở đây: http://www.mediafire.com/file/ko46c0s2d476669/HocXuLyBietLe.rar

Hẹn gặp các bạn ở những bài tiếp theo

Chúc các bạn thành công!

Trần Duy Thanh (http://ssoftinc.com/)