[コールリン1.4 ]呼び出し可能な参照での変換を中断する


Kotlin 1.4から、呼び出し可能な参照のサスペンド変換がサポートされます🎉 Release noteはこの機能についてあまり言いません、しかし、あなたがFlow#combine()を使うとき、それは本当に役に立ちます.
つのフローを結合してcollect()で使用するふりをしましょう.Kollin 1.4以前では、次のようにコードを書くことができます.
suspend fun before4_1() {
    combine(
        flowA, flowB
    ) { a, b ->
        a to b
    }.collect {
        val a = it.first
        val b = it.second
        println("$a and $b")
    }
}

val flowA = flowOf(1, 2)
val flowB = flowOf(3, 4)
このコードは冗長であり、あまり見えません(あまりにも多くのa Sとb S)!😩)
Kollin 1.4から、上記のコードを簡素化できます.
suspend fun from1_4() {
    combine(
        flowA, flowB, ::Pair
    ).collect { (a: Int, b: Int) ->
        println("$a and $b")
    }
}

val flowA = flowOf(1, 2)
val flowB = flowOf(3, 4)
Kollin 1.4以前では、combine()の3番目のパラメータの型がサスペンド関数であるため、コンパイルエラーが発生します.コンパイルエラーが発生するように、Pairクラスのコンストラクタはサスペンド機能ではありません.Kotlin 1.4から、この3番目のパラメータラムダは自動的にsuspend functionに変換され、微細に動作します.
Bounus : collect()のパラメータにはdestructuring declarationsを使います.
    ).collect { (a: Int, b: Int) ->
我々は、pair.firstpair.secondの値をここで挙げることができます.タイプ定義は省略できますが、()が必要です.