天天看点

android开发之&android中的swift,kotlin高阶函数和Lambda表达式(九)

/**
 * 高阶函数:接受一个参数是函数类型的函数,或者返回一个函数类型的值,就可以称为高阶函数
 */
fun main(args: Array<String>) {
    val cc = arrayOf(5,4,3)
    //{it>3}是一个Lambda表达式,作为filter函数唯一的也是最后一个参数,所以调用可以省略圆括号,it代表array中的
    //每一个元素
    val dd = cc.filter { it > 3 }

    val ee = arrayOf("Aa","Bb","cC","CCC")
    val ff = ee.filter { it.contains('c') }

    /**
     * 顶层函数引用
     */
    fun isEven(a:Int) = a % 2 == 0
    val ddd = arrayOf(5,4,3).filter { isEven(it) }
    //"::"一元操作符要写在函数名之前。花括号要改成正常函数调用的圆括号
    val ggg = arrayOf(5,4,3).filter (::isEven)

    /**
     * 成员函数和扩展函数的引用
     */
    val minValue = comboTwoValue(-1,2){a,b -> Math.min(a,b)}
    //简化成函数引用的写法
    val minValue2 = comboTwoValue(-3,4,Math::min)

    fun Int.isOdd() = this % 1 ==0
    val allOddNumbers = arrayOf(5,4,3).filter(Int::isOdd)

    val p = arrayOf("cool","kotlin","tutorial")
    val x = p.filter ( "kotlin"::equals)
    println(x)//此种引用称为边界引用,指的是给函数加了边界
}
           
/**
 * Lambda表达式
 */
fun main(args: Array<String>) {
    /**
     * Lambda的使用
     * Lanbda表达式就是一个类型为函数类型的变量
     */
    val result = comboTwoValue(3,4, add)
    println(result)//结果:7
}
/**
 * Lambda的定义
 * Kotlin中的Lambda表达式写法:{参数1,参数2.....参数n   -> 执行语句}
 */
fun add(x:Int,y:Int):Int{
    return x + y
}
//改成Lambda表达式,并赋值给一个变量
var add = {x:Int,y:Int  ->
    x + y
}//注意:lambda表达式不允许出现return语句
fun comboTwoValue(x:Int,y:Int,method:(a:Int,b:Int) -> Int):Int{
    return method(x,y)
}
//第三个参数"method:(x:Int,y:Int)-> Int"的类型就是一个函数类型,注意函数类型的定义中,返回值前面的冒号成了
//"->"。这是与函数定义上的一个显著区别,这样以后看到"——>"就知道这是一个函数类型定义
//method函数可以直接使用包含他的主函数comboTwoValue的2个参数(x和y)进行运算
           

继续阅读