与小清新的距离 你只差一个RxKotlin !

2020-11-23 14:55:34 浏览数 (1)

Rx响应式编程的系列框架中,很多朋友对RxJava是最熟悉的,其实它还有很多同胞。比如:RxKotin, RxSwift,RxPhp, RxGo, RxNet, RxJS...,一想到iOS必定对RxSwift很熟悉, Android开发对RxJava却情有独钟!今天就来涨涨RxKotin的姿势!

Rx 是Reactive Extensions的其中的一个方向,这种面向函数的响应试编程目前已经覆盖Java,android, js, Objiect-c, PHP , .net等。Rx系列最经典基于观察者模式带给大家直观的编程开发体验,受到很多开发者的青睐。 观察者,可观察者对象,如果细分有Schedulers,Flow对象等,Rx很好理解,就四大模块,观察者和被观察对象,他们产生的操作schdulers调度器, 它们两者产生的action的可操作的Flow流,具体细节可参考推荐文章。这种编程习惯带给大家的是掌握一门语言的风格,就可以快速简单的使用另一们语言的魔力,相信这也是未来10年的发展趋势。

RxKotlin

RxKotlin是基于kotlin扩展的rx衍生体,对kotlin无需再普及,这种支持Lambdas语法的简洁姿势,会让代码变得小清新和灵活。可能你已经在java8上体验了一番。

开发者可以用Kotlin将Rxjava变得更加简单,接下来用2.x 先睹为快!

代码语言:javascript复制
package rx.lang.kotlin
import rx.Observable

fun main(args: Array<String>) {    

val list = listOf("Java", "c", "php", ".net", "js")

    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!") }
            )
}

好 很kotlin! 仔细发现code将选择字符长度大于5的元素,然后打印出来,很好理解。

RxKotlin使用

1 老样子 先是集成

Maven:

代码语言:javascript复制
<dependency>
    <groupId>io.reactivex.rxjava2</groupId>
    <artifactId>rxkotlin</artifactId>
    <version>2.x.y</version>
</dependency>

Gradle:

代码语言:javascript复制
compile 'io.reactivex.rxjava2:rxkotlin:2.y.z'

2 添加到项目中,套路!接着来!

代码语言:javascript复制
repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
    compile 'com.github.ReactiveX:RxKotlin:1.x-SNAPSHOT'}

3结合Retrofit再来看看!

代码语言:javascript复制
data class SearchResultEntry(val id : String, val latestVersion : String)
data class SearchResults(val docs : List<SearchResultEntry>)
data class SearchResponse(val response : SearchResults)

interface SearchService {    
@GET("/solrsearch/data")
    fun search(@Query("q") s : String, @Query("rows") rows : Int = 20) : Observable<SearchResponse>
}

fun main(args: Array<String>) {    
 val service = RestAdapter.Builder().
            setEndpoint("http://search.maven.org").
            build().
            create(MavenSearchService::class.java)
    service.search("rxkotlin").
            flatMapIterable { it.response.docs }.
            doAfterTerminate { System.exit(0) }.  
             // we need this otherwise Rx's executor service will shutdown a minute after request completion
            subscribe { artifact ->
                println("${artifact.id} (${artifact.latestVersion})")
            }
}

前面三行是定义好我们的model实体,返回bean, 返回的rsponsedata class 是用来声明一个class的,好比c中def,js中var申明变量对象一样。

SearchService用过retrofit的也很明白,定义的一个抽象API接口。

定义的接口干啥东东的呢,实际就是查询一下某个库的最新版本。案列查询以“rxkotin”作为参数,通过将返回的数据获取doc文档,接着就进行输出了Ta的maven库ID和Version.

通过这个简单的栗子,发现不管用rxJava, 还是只用retrofit, 通过使用rxkotlin将业务流程变得更加清晰,那么kotlin是否也有他的操作符,当然他也有过滤器,转换器,拆分符和rxjava命名保持一致。如果有兴趣的可以继续去官方github关注。

这里不再具体说明每个API。

写在最后

Rx家族目前最为熟知的是rxjava和rxSwift,前两者在移动平台上开发也不再是什么新鲜事了,那么其他的家族成员是否也会受到大家的热宠呢,让我们拭目以待!

技术 - 资讯 - 感悟

END

0 人点赞