Kotlin_lambda式

Kotlin_lambda式


Java8で導入されたラムダ式は、この機能のほとんどのJava開発者の興奮と期待です。それはどのようなラムダ式であることを?

ラムダは、我々の以前のJavaまたはKotlinに、関数のパラメータは、オブジェクトの変数またはインスタンス変数の単純な基本的なデータ・タイプであってもよいし、実質的に短いコードは、他の機能に送信される式です。ラムダ式は、それが値であるため、ラムダは、他の関数にパラメータとして渡すことができるので、それは、渡すことができ、我々は御馳走に値としてコードの一部を置くことができるように発生する可能性があります。ラムダ式は、ので、私たちのコードより簡潔に表示されます。

最適化1.lambda式

fun main(args: Array<String>) {
    //lambda表达式的优化
    val a = 10
    val b = 20
    val r1 = ca3(a,b){a,b->
        a+b
    }
    val r2 = ca3(a,b){a,b->
        a*b
    }
    println("$r1,$r2")
}

fun ca3(a1: Int,a2: Int,bolck:(Int,Int)->Int):Int{
    var res = bolck(a1,a2)
    return res
}

結果
30
200

2.無名関数

fun main(args: Array<String>) {

    var a = 10
    var b = 20
    var r1 = 0
    //匿名函数为lambda表达式

    r1 = ca1(a,b,{a,b->
        a+b

    })
    println(r1)
    var r2 = ca1(a,b,{a,b->
        a * b

    })
    println(r2)
}
fun ca1(a1: Int,a2: Int,bolck:(Int,Int)->Int):Int{
    var res = bolck(a1,a2)
    return res
}

結果
30
200

3.簡単なラムダ式

()と呼び出し

fun main(args: Array<String>) {

//    {
//        println("1")
//    }()
    {
        println("2")
    }.invoke()
}

結果
2

4.ラムダ式のパラメータがあります

fun main(args: Array<String>) {
//    val res = {a:Int,b:Int->
//        a+b
//    }(10,20)
//    println(res)
    val res1 = {a:Int,b:Int->
        a+b
    }.invoke(10,20)
    println(res1)
}

結果
30

5.invoke機能

あなたはヌルを受け入れることができます

fun main(args: Array<String>) {
//    val block:()->Unit =
//    {
//        println("1")
//    }
//    block()
//    block.invoke()
    val block1:(()->Unit)? = null
    {
        println("1")
    }
    block1?.invoke()
}

結果
1

6.lambda発現_it

ときにのみ1つのパラメータがそれを使用することができます。

fun main(args: Array<String>) {

    var a = 10
//    val res = ca4(a, {a ->Int
//      a+10
//    })
//    println(res)
    //当只有一个参数的时候可以用到it
    var res1 = ca4(a,{it
    it+10
    })
    println(res1)
}
fun ca4(a1: Int,bolck:(Int)->Int):Int{
    return bolck(a1)
}

結果
20

7.lambda発現_foreach

fun main(args: Array<String>) {
    var str = "里斯"

    str.forEach ({ char->
        println(char)
    })
    //lambda表达式优化,括号迁移
    str.forEach() {char->
        println(char)
    }
    //当括号中没有参数的时候可以省略
    str.forEach { char->
        println(char)
    }
    //lambda表达式只有一个参数,可以使用it
    str.forEach {
        println(it)
    }
}

結果

のSi

のSi

のSi

のSi

移行括弧は、括弧は時間パラメータは括弧を省略することはできない場合ときに、ラムダ式が最適化されます

8λの発現_indexoffirst

最初の文字は文字かどうかを判断します。そして、インデックスに戻ります

fun main(args: Array<String>) {
    val arrayOf = arrayOf("11", "21", "13")
    //判断第一个字符为1开头的索引
    var index = arrayOf.indexOfFirst { it
        it.startsWith("1")
    }
    println(index)
}

結果
0

9.注意

一般的なラムダ式は、最後の行を返します。

fun main(args: Array<String>) {
    val res = {
        "a"
        println("1")

    }()
    //lambda表达式返回最后一行
    println(res)
}

結果
1

发布了165 篇原创文章 · 获赞 12 · 访问量 1万+

おすすめ

転載: blog.csdn.net/qq_43141726/article/details/104615996