前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >与小清新的距离 你只差一个RxKotlin !

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

作者头像
开发者技术前线
发布2020-11-23 14:55:34
9260
发布2020-11-23 14:55:34
举报
文章被收录于专栏:开发者技术前线

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发者技术前线 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档