Kotlin for Android: combined with Rx - The awesome way

TATA, có lẽ hơi muộn màng khi đến bây giờ Google mới chính thức lên tiếng về việc support Kotlin Google I/O 2017 , anw, đối với "fan" Kotlin, đây thực sự là một điều tuyệt vời, rồi chúng ta sẽ thấy sự trỗi dậy mạnh mẽ của cộng đồng Kotlin, đặc biệt là đối với các developer Android native, khi trước đây chẳng có sự lựa chọn nào khác ngoài Java.

Tào lao một chút, thực ra ngôn ngữ cũng chỉ là một kiểu công cụ, dạo gần đây hay nổi lên các chủ đề tranh cãi về Kotlin hay Java cho Android, nhiều người coi đây là "the begining of the end for java", cá nhân mình thì không nghĩ vậy, ít nhất là không phải bây giờ, mục đích của chúng ta là làm ra những sản phẩm chất lượng, vả lại công nghệ thì thay đổi từng ngày, cho nên, cái quan trọng là chúng ta có khả năng luôn luôn tiếp thu được với cái hay hơn và tốt hơn, btw, "mỗi chúng ta đều là những con ếch ở trong giếng, cái khác nhau là miệng giếng của ai to hơn thôi" - trích dẫn từ ai đó mình chả nhớ tên 😃

Quay lại bài viết, hôm nay mình xin phép được giới thiệu cách Kotlin và Rx kết hợp với nhau nhé

Rx Android và RxJava

Đây là hai từ khóa đình đám và rất hot cũng rất lâu rồi nên mình không nói nhiều về reactive programming nữa, các bạn có thể tham khảo ở viblo rất nhiều bài viết giới thiệu cũng như đào sâu về Rx trong android.

Rx trong Kotlin

Kotlin có tính tương thích tuyệt vời, điều mà java 8 vẫn chưa làm được, kotlin có thể làm việc được với hầu hết các bộ source java hiện tại, mix code java và kotlin trong cùng một project .. nên việc sử dụng rx trong kotlin cũng rất đơn giản, không khác mấy so với cách dùng cũ trong java

Observable

Observable.create(object : Observable.OnSubscribe<Int> {
    override fun call(subscriber: Subscriber<in Int>) {
        subscriber.onNext(1)
        subscriber.onNext(2)
        subscriber.onNext(3)
        subscriber.onCompleted()
    }
})

ngoài việc thay thế các syntax của java thì việc implement cấu trúc của rx vẫn như cũ

Subscribers

Observable.just(1,2,3)
          .subscribeOn(Schedulers.newThread()) 
          //each subscription is going to be on a new thread.
          .observeOn(AndroidSchedulers.mainThread())) 
          //observation on the main thread
          //Now our subscriber!
          .subscribe(object:Subscriber<int>(){
            override fun onCompleted() {
             //Completed
            }

            override fun onError(e: Throwable?) {
             //TODO : Handle error here
            }

            override fun onNext(t: int?) {
             // result 
            }
           })

chẳng có gì khác lại ngoài kí hiệu? , đây chính là cơ chế nullSafe, một tính năng tuyệt vời của kotlin

so, whats new?

Ngoài việc có thêm lambda expressions giúp less code và tường mình hơn trong những khối code subcribes phải dùng nhiều phương thức map, filter .., mình xin giới thiệu thêm RxKotlin, một thư viện hỗ trợ cho việc sử dụng kotlin và rx RxKotlin :

 val list = listOf("Alpha", "Beta", "Gamma", "Delta", "Epsilon")

    list.toObservable() // extension function for Iterables
            .filter { it.length >= 5 }
            .subscribeBy(  // named arguments for lambda Subscribers
                    onNext = { println(it) },
                    onError =  { it.printStackTrace() },
                    onComplete = { println("Done!") }
            )

awesome, mọi thứ trong đã đơn giản, rõ ràng hơn rất nhiều!

Kết

Kotlin vẫn đang trong quá trình phát triển và khẳng định vai trò của mình, với sự support của Google, mình tin là nó sẽ làm thêm được nhiều điều tuyệt vời hơn nữa, chúng ta cùng chờ xem và còn chần chừ gì nữa mà không code những dòng kotlin đầu tiên trong dự án của mình, thanks for reading


All Rights Reserved