Bài 7: Xử lý ngoại lệ trong Kotlin - Học Kotlin cơ bản

Đăng bởi: Admin | Lượt xem: 1551 | Chuyên mục: Android


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
Xử lý ngoại lệ trong Kotlin cũng tượng như trong Java. Và chúng ta đều biết, ngoại lệ là những lỗi có thể phát sinh lúc thực thi. Chẳng hạn như đọc một file không còn tại. Hoặc kết nối với database không có sẵn.

1. Cú pháp

try {
    Xử lý
} catch (e: ExceptionName) {
    Xử lý ngoại lệ
} finally {
    Giải phóng tài nguyên
}
Để ném ra ngoại lệ chúng ta sử dụng throw. Tuy nhiên để bắt ngoại lệ, chúng ta sử dụng try…catch như trên. Đối với finally có thể bỏ qua khi viết try…catch và những câu lệnh bên trong nó luôn luôn được thực thi bất kể cho xảy ra ngoại lệ hay không.
Sau đây là một số exception thông dụng
  1. ArithmeticException: Ngoại lệ liên quan đến tính toán số học
  2. NumberFormatException: Ngoại lệ liên quan đến định dạng số
  3. IllegalArgumentException: Ngoại lệ liên quan đến đối số không phù hợp
  4. Exception: Ngoại lệ tổng quát nhất
Khi xử lý ngoại lệ, chúng ta có thể chỉ định cụ thể từng ngoại lệ trên hoặc sử dụng Exception.

2. Ví dụ

fun main(args: Array<String>) {
   try {
      val age:Int = 12
      val name:String = "Lê Hồng Kỳ"
      name.toInt()
   } catch(e:Exception) {
      e.printStackTrace()
   } finally {
      println("Xử lý ngoại lệ trong Kotlin")
   }
}
Khi chạy ví dụ trên, chương trình sẽ phát sinh một ngoại lệ tại dòng name.toInt() vì không thể chuyển một chuỗi sang dạng số int được. Với chương trình trên, nếu không xử lý ngoại lệ thì chương trình sẽ phát sinh lỗi và kết thúc bất thường.

3. Kết luận

Khi lập trình, các lập trình viên phải lưu ý sẽ phải đặt những đoạn code có thể phát sinh lỗi thực thi vào trong try…catch nếu không muốn chương trình của mình có thể kết thúc bất thường lúc chạy.
Trong một khối try…catch, chúng ta có thể lòng nhiều catch. Điều này đồng nghĩa với việc, câu lệnh nào phát sinh lỗi trước sẽ vào catch tương ứng.
fun main(args: Array<String>) {
  try {
	 var num: Int
	 var tmp = "Gia Su Tin Hoc" 
	 num = tmp.toInt()
	 var result = num / 0
  } catch (nfe: NumberFormatException) {
	 nfe.printStackTrace()
	 println("Khong phai so")
  } catch (ae: ArithmeticException) {
	 ae.printStackTrace()
	 println("\nKhong chia duoc cho 0")
  }
}
Khi chạy đoạn code trên, chương trình sẽ phát sinh ngoại lệ NumberFormatException vì không thể chuyển một chuỗi “Gia Su Tin Hoc” thành một số
Như các bạn thấy, mặc dù chúng tôi sử dụng 2 ngoại lệ khi viết try…catch. Tuy nhiên khi chạy chương trình thì lệnh name.toInt() phát sinh lỗi nên catch (nfe: NumberFormatException) sẽ được thực hiện.
Cũng đoạn code trên và được sửa lại như bên dưới thì khi chạy chương trình thì ngoại lệ sẽ vào catch (ae: ArithmeticException) vì không thể chia cho số 0.
fun main(args: Array<String>) {
  try {
    var num: Int
    var tmp = "10" 
    num = tmp.toInt()
    var result = num / 0
  } catch (nfe: NumberFormatException) {
    nfe.printStackTrace()
    println("Khong phai so")
  } catch (ae: ArithmeticException) {
    ae.printStackTrace()
    println("\nKhong chia duoc cho 0")
  }
}
Phát sinh ngoại lệ
Như vậy, thông qua bài học này, mình đã giới thiệu đến các bạn cách xử lý ngoại lệ trong Kotlin. Cảm ơn các bạn đã đọc.
Bài tiếp theo: Xử lý chuỗi trong Kotlin >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!