美文网首页
8. Kotlin---函数与Lambda表达式

8. Kotlin---函数与Lambda表达式

作者: 努力生活的西鱼 | 来源:发表于2019-11-07 10:36 被阅读0次
    Kotlin
    函数

    Kotlin中的函数使用fun关键字声明。

    const val str1: String = "10";
    const val str2: String = "20";
    
    fun main() {
    
        val number = sum(str1.toInt(), str2.toInt()); // toInt(): 类型转换为Int
        println("number is $number"); // number is 30
    
        println(sum2(100, 300)); // 400
    
    }
    
    // 定义函数
    fun sum(arg1: Int, arg2: Int): Int {
        return arg1 + arg2;
    }
    
    // 匿名函数
    val sum2 = fun(arg1: Int, arg2: Int): Int {
        return arg1 + arg2;
    }
    
    // 返回无意义
    fun sum03(): Unit {
        println("无意义!!!");
    }
    
    // 单表达式函数
    fun double(x: Int): Int = x * 2;
    
    Lambda介绍

    Lambda表达式与匿名函数是函数字面值,即未声明的函数,但立即作为表达式传递。

    Lambda表达式的本质其实是匿名函数,因为在其底层实现中还是通过匿名函数来实现的。

    Lambda作为函数式编程的基础,其语法也是相当简单的。

    max(strings,{a,b -> a.length < b.length})
    

    函数max是一个高阶函数,接受一个函数作为第二个参数。其第二个参数是一个表达式,它本身是一个函数,即函数字面值。

    Lambda表达式语法
    val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y }
    

    Lambda表达式总是括在花括号中,完整语法形式的参数声明放在花括号内,并有可选的类型标注,函数体跟在一个->符号之后。如果推断出的该Lambda的返回类型不是Unit,那么该Lambda主体中的最后一个表达式会视为返回值。

    将Lambda表达式传给最后一个参数

    Kotlin中有一个约定:如果函数的最后一个参数是函数,那么作为相应参数传入的Lambda表达式可以放在圆括号之外

    val product = items.fold(1) { acc, e -> acc * e }
    fun max(strings:String) {a:Int,b:Int -> a.length < b.length}
    

    这种语法也称为拖尾Lambda表达式

    it
    • it是在当一个高阶函数中Lambda表达式的参数只有一个的时候可以使用it来使用此参数。it可表示为单个参数的隐式名称,是Kotlin语言约定的。
    val array:Array<Int> = arrayOf(1,2,3,4,5,6);
    
    fun main() {
        println(array.filter {i: Int -> i < 3 }); // [1, 2]
        println(array.filter { it <= 3 }); // [1, 2, 3]
        println(array.filter { it < 5 }.component1()); // 1, component1: 从集合中返回第一个element
    }
    

    注意:

    println(array.filter {(i: Int) -> i < 3 }); // (i: Int):加括号是错误的
    

    相关文章

      网友评论

          本文标题:8. Kotlin---函数与Lambda表达式

          本文链接:https://www.haomeiwen.com/subject/zeeubctx.html