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

316 阅读2分钟
/** 
* 高阶函数:接受一个参数是函数类型的函数,或者返回一个函数类型的值,就可以称为高阶函数 
*/
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)进行运算