12/08/2018, 15:02

Kotlin for android: introduce when expression, a "switch" within new powers

Hôm nay mình sẽ quay trở lại loạt bài viết giới thiệu về Kotlin, một ngôn ngữ mới mẻ với cú pháp hiện tại và mạnh mẽ, trong bài viết này, mình xin được giới thiệu một từ khóa mà chúng ta vẫn sử dụng hàng ngày trong các đoạn code của mình, tuy nhiên, với sự nâng cấp và tùy biến của Kotlin, đã trở ...

Hôm nay mình sẽ quay trở lại loạt bài viết giới thiệu về Kotlin, một ngôn ngữ mới mẻ với cú pháp hiện tại và mạnh mẽ, trong bài viết này, mình xin được giới thiệu một từ khóa mà chúng ta vẫn sử dụng hàng ngày trong các đoạn code của mình, tuy nhiên, với sự nâng cấp và tùy biến của Kotlin, đã trở nên mạnh mẽ hơn rất nhiều, bắt đầu thôi

Dẫn nhập

Từ khóa mà mình muốn nhắc tới ở đây chính là *switch*, chúng ta sử dụng chúng ở rất nhiều nơi, tuy nhiên, trong java, nó có vẻ khá là cứng nhắc, vì chúng ta chỉ sử dụng được ở một số ngữ cảnh nhất định và rất khó tùy biến, chính vì vậy, Kotlin cho ra đời cú pháp mới với từ khóa *when*, một sự thay thế cho cả *switch* lẫn những ngữ cảnh *if/else* phức tạp và nhiều hơn thế nữa.

When expression trong Kotlin

Trước tiên, chúng ta có thể sử dụng when trong những trường hợp dùng switch như thông thường, ví dụ sau để show một đối tượng toast hiện thị giá trị visibility của một view:

when(view.visibility){
    View.VISIBLE -> toast("visible")
    View.INVISIBLE -> toast("invisible")
    else -> toast("gone")
}

Cách sử dụng giống như switch, nhưng thay vì sử dụng từ khóa default cho những trường hợp chưa được cover, chúng ta dùng từ khóa else thay thế.

so, whats make it really powerful?

auto - casting

Mọi đối tượng ở bên trái đều có thể được sử dụng ở mệnh đề bên trái một cách tự do, ví dụ dưới đây xét cho trường hợp đối tượng của when là một thể hiện của một View cụ thể

when (view) {
    is TextView -> toast(view.text)
    is RecyclerView -> toast("Item count = ${view.adapter.itemCount}")
    is SearchView -> toast("Current query: ${view.query}")
    else -> toast("View type not supported")
}

When không đối số (without arguments)

Nếu không quy định đối số cho when, chúng ta có thể tự do kiểm tra mọi loại điều kiện ở mệnh đề bên trái:

val value = when {
    x in 1..10 -> "so tu nhien duong be hon 10"
    s.contains("sontung-MTP") -> "chung ta khong thuoc ve nhau"
    v is ViewGroup -> "viewgroup co : ${v.getChildCount()} view con"
    else -> "khong biet"
}

thật là vi diệu @@

Kết

Với when, chúng ta có thể xử lý được những trường hợp điều kiện phức tạp với ít dòng code hơn, dễ hiểu hơn, have fun !

0