【Kotlin 反应式编程】第1讲 你好,Reactive Programming

简介: 【Kotlin 反应式编程】第1讲 你好,Reactive Programming1.创建 Gradle Kotlin 项目image.

【Kotlin 反应式编程】第1讲 你好,Reactive Programming

1.创建 Gradle Kotlin 项目


image.png

2.传统的命令式编程风格

添加 rxkotlin 依赖

compile group: 'io.reactivex.rxjava2', name: 'rxkotlin', version: '2.2.0'

https://github.com/ReactiveX/RxKotlin

image.png
import io.reactivex.rxkotlin.subscribeBy
import io.reactivex.rxkotlin.toObservable

fun main(args: Array<String>) {

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

}

3.传统的命令式编程思维

//命令式编程( Imperative)
fun testImperative1() {
    val x1 = 7
    val flag1 = isOdd(x1)
    println("flagA1:$flag1")

    val x2 = 10
    val flag2 = isOdd(x2)
    println("flagA2:$flag2")
}

fun testImperative2() {
    var x = 7
    val flag = isOdd(x)

    println("flagB1:$flag")

    x = 10
    println("flagB2:$flag")
}

4.函数式编程思维

fun testImperative3() {
    val s = System.currentTimeMillis()
    val flag = { x: Int -> isOdd(x) }

    val t1 = Thread {
        println("flagC1:${flag(7)}")
    }

    val t2 = Thread {
        println("flagC2:${flag(10)}")
    }

    t1.start()
    t2.start()
    t1.join()
    t2.join()

    val t = System.currentTimeMillis()
    println("testImperative3=${t - s}ms")
}

5.使用 RxJava 类库 API

//函数式编程( Functional)
fun testReactive() {
    val s = System.currentTimeMillis()
    val subject: Subject<Int> = PublishSubject.create()
    subject.map { isOdd(it) }.subscribeBy(
            onNext = { println("flagD:$it") },
            onError = { it.printStackTrace() },
            onComplete = { println("Done!") }
    )

//    一种基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一条流合并为一条新的流。
    val t1 = Thread {
        subject.onNext(7)
    }

    val t2 = Thread {
        subject.onNext(10)
    }

    t1.start()
    t2.start()
    t1.join()
    t2.join()

    val t = System.currentTimeMillis()
    println("testReactive=${t - s}ms")
}

三个重要的对象

Observable-数据发送者
Subscriber-订阅者
OnSubscribe-事件

(1)create 函数

val subject: Subject<Int> = PublishSubject.create()
image.png

create 操作符应该是最常见的操作符了,主要用于产生一个 Obserable 被观察者对象,为了方便大家的认知,以后的教程中统一把被观察者 Observable 称为发射器(上游事件),观察者 Observer 称为接收器(下游事件)。

image.png

(2)map 函数

 subject.map { isOdd(it) }.subscribeBy(
            onNext = { println("flagD:$it") },
            onError = { it.printStackTrace() },
            onComplete = { println("Done!") }
    )

一个Observable可能被多个subscriber订阅,而不同的订阅所需要的最终数据不同,但事件的操作逻辑是相同的,就可以利用map来满足不同的数据需求。

相关文章
|
7月前
|
Java 调度 Android开发
构建高效Android应用:探究Kotlin多线程编程
【2月更文挑战第17天】 在现代移动开发领域,性能优化一直是开发者关注的焦点。特别是在Android平台上,合理利用多线程技术可以显著提升应用程序的响应性和用户体验。本文将深入探讨使用Kotlin进行Android多线程编程的策略与实践,旨在为开发者提供系统化的解决方案和性能提升技巧。我们将从基础概念入手,逐步介绍高级特性,并通过实际案例分析如何有效利用Kotlin协程、线程池以及异步任务处理机制来构建一个更加高效的Android应用。
|
4月前
|
Java Android开发 开发者
Kotlin 循环与函数详解:高效编程指南
高效编程实践 • 避免不必要的循环 - 尽量使用集合操作如 map、filter 来减少显式的循环。 • 使用尾递归优化 - 对于需要大量递归的情况,考虑使用尾递归以优化性能。 • 内联函数 - 对于传递 Lambda 表达式的函数,使用 inline 关键字可以减少运行时开销。 通过上述指南,您应该能够更好地理解 Kotlin 中的循环和函数,并能够编写更加高效和简洁的代码。Kotlin 的设计哲学鼓励开发者编写易于理解和维护的代码,而掌握循环和函数是实现这一目标的关键步骤。 如果您想了解更多关于 Kotlin 的循环和函数的信息,以下是一些官方文档和资源,它们可以提供额外的参考
58 1
|
4月前
|
Java Kotlin
Kotlin 循环与函数详解:高效编程指南
Kotlin中的循环结构让你能轻松遍历数组或范围内的元素。使用`for`循环结合`in`操作符,可以简洁地访问数组中的每个项,如字符串数组或整数数组。对于范围,可以用`..`来定义一系列连续的值并进行迭代。此外,Kotlin支持通过`break`和`continue`控制循环流程。函数则允许封装可复用的代码块,你可以定义接受参数并返回值的函数,利用简写语法使代码更加紧凑。例如,`myFunction(x: Int, y: Int) = x + y`简洁地定义了一个计算两数之和的函数。
63 1
|
Java Shell API
Scala和Kotlin脚本编程
Scala和Kotlin作为运行在JVM上的编程语言,解决了Java的很多痛点。今天我们来聊聊如何将Scala和Kotlin作为脚本语言使用(Java不支持以脚本形式运行哦)。
92 0
|
安全 Java 编译器
Kotlin 进阶之路(一) 编程基础(下)
Kotlin 进阶之路(一) 编程基础(下)
117 0
|
存储 Java Kotlin
Kotlin 进阶之路(一) 编程基础(上)
Kotlin 进阶之路(一) 编程基础
143 0
|
API Kotlin
【Kotlin 初学者】扩展-享受编程
一、介绍 Kotlin 可以对一个类的属性和函数进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。
246 0
【Kotlin 初学者】扩展-享受编程
|
XML 前端开发 JavaScript
用kotlin来实现dsl风格的编程
用kotlin来实现dsl风格的编程
295 0
用kotlin来实现dsl风格的编程
|
JavaScript Java Go
Rise of Kotlin: The Programming Language for the Next Generation
Rise of Kotlin: The Programming Language for the Next Generation https://hackernoon.
1567 0
|
前端开发 JavaScript Java
《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin )
《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL Reactive Programming Using Rx Kotlin https://github.com/ReactiveX/RxKotlin RxKotlin: RxJava bindings for Kotlin 使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin ) 我们现在已经基本知道 Kotlin 中 DSL 的样子了。
1714 0