Kotlin for Android (III) : How beautiful it is

Hi cả nhà, hôm nay chúng ta sẽ quay lại với chuỗi bài về Kotlin cho Android, hi vọng qua 2 bài viết trước, mọi người đã có cái nhìn rõ ràng hơn về ngôn ngữ mới mẻ này, còn trong phạm vi bài viết này, mình sẽ chia sẽ một số điểm mà theo ý kiến mình đã góp phần làm nên vẻ đẹp cho Kotlin Android !

Nào, let's go!

Android Extension, hãy quên đi findViewById

Với Android Extension, chúng ta có thể dễ dàng map các view trong file xml sang cái đối tượng trong file kotlin bằng cách import trực tiếp, ví dụ trong một ViewHolder của Adapter này:

 import framgia.com.main.item_contact.view.*

 fun bindContact(contact: Contact) {
    itemView.name.text = contact.name
    itemView.avatar.loadUrl(contact.image)
    itemView.setOnClickListener { listener(contact) }

}

hay thậm chí là vi diệu như thế này

fun bindContact(contact: Contact) = itemView.apply {
    name.text = contact.name
    avatar.loadUrl(contact.image)
    setOnClickListener { listener(contact) }
}

Start activity chưa bao giờ dễ dàng hơn thế

Có bao giờ bạn mệt mỏi với cách truyền thống, khi phải tạo intent, rồi bundle, extras .. bla bla đủ thứ, vậy bạn không thử với kotlin nhỉ:

 startActivity<DetailActivity>("id" to 2, "company" to "Kotlin")

một mũi tên (1 dòng code), trúng nhiều con nhạn (chức năng), awsome!

Data class trở nên thật tuyệt vời

Setter, getter, toString() ...bla bla ư? create một đống hàm nhìn muốn phát mệt, đừng lo, kotlin sẽ giải quyết giúp bạn:

 data class Person(val name: String, val surname: String, val age: Int)

shup up and take my money ! aha

Collections hỗ trợ nhiều hơn

Thực ra các task liên quan đến collections thường tốn khá nhiều effort, Kotlin cũng đưa ra rất nhiều options cho developer có thể thoải mái sử dụng collections hơn:

 return parsedContacts.filter { it.name != null && it.image != null }
        .sortedBy { it.name }
        .map { Contact(it.id, it.name!!, it.image!!) }

rất gọn gàng mà lại hiệu quả, right?

Quên đi AsyncTask

Tất nhiên là chúng ta có nhiều sự lựa chọn khác thay vì AsyncTask như RxJava .. tuy nhiên, sao lại không thử với Kotlin xem họ đã làm gì với những tác vụ background nhỉ?

 async() {
    // Do something in a secondary thread
    uiThread {
        // Back to the main thread
    }
}

(y) (y) (y)

More lambdas, more beautiness

Yes, chúng ta đã nói rất nhiều về lambdas, và chúng ta đều thừa nhận rằng nó rất hữu ích và tuyệt vời, đúng không?

New ImageView

Thật ra là cái tiêu đề mình chém gió đấy, không phải là một ImageView mới đâu, chỉ là mình muốn giới thiệu một cách hay ho mà Kotlin sử dụng, này nhé, chúng ta đều biết là ImageView thì không load được một url trực tiếp mà phải thông qua một số thư viện như Picasso, Glide .. đúng không, vậy hãy xem mình làm nhé: Tạo một hàm để load url:

 fun ImageView.loadUrl(url: String) {
    Picasso.with(context).load(url).into(this)
}

như bạn thấy, Kotlin có thể add một hàm vào class, tất nhiên là bất kì một class nào, xong, bây giờ chúng ta chỉ cần gọi

imageView.loadUrl("http://....")

ta da !

Tạm kết

Thật ra những thứ mình chia sẽ ở trên chỉ là một phần nhỏ những điều tuyệt vời mà Kotlin mang đến cho chúng ta, với cá nhân mình thì mình thấy rất thú vị, và mình đang mong chờ Kotlin sẽ ngày càng hoàn thiện và thêm nhiều tính năng tuyệt vời hơn nữa, chào tạm biệt và hẹn gặp lại các bạn ở những bài viết sau trong chuỗi bài Kotlin cho Android nhé !


All Rights Reserved