美文网首页
Kotlin 高阶函数笔记(这只是笔记,没有讲解)

Kotlin 高阶函数笔记(这只是笔记,没有讲解)

作者: ZYiDa | 来源:发表于2018-12-21 14:34 被阅读8次
package com.zcz.FunctionsType

fun foooo2(baseName:String,baseAge:Int):String{
    return baseName+"***"+baseAge + "\n"
}

fun foooo3(p:String,ia:Int):String{
    return "paragram1:"+p+",paragram2:"+ia +"\n"
}

/**
 * 使用函数类型作为形参类型 *
 * */
fun map(data:Array<Int>,fnnn:(Int)->Int):Array<Int>{
    var result = Array<Int>(data.size,{0})
    for (i in data.indices){
        result.set(i,fnnn(data[i]))
    }
    return result
}
/**平方**/
fun square(n:Int):Int{
    return n*n
}
/**立方**/
fun cube(n:Int):Int{
    return n*n*n
}
/**计算阶乘**/
fun factorial(n:Int):Int{
    var result = 1
    for (index in 2..n){
        result *= index
    }
    return result;
}

/**
 * 定义函数 该函数的返回值类型为(Int)->Int *
 * **/
fun getMathFunc(type:String):(Int)->Int{
    //局部函数
    fun square(n:Int):Int{
        return n * n
    }
    fun cube(n: Int):Int{
        return n * n * n;
    }
    fun factorial(n: Int):Int{
        var result = 1;
        for (index in 2..n){
            result *= index;
        }
        return result;
    }
    when(type){
        "square" -> return ::square;
        "cube" -> return ::cube;
        else ->{
            return ::factorial;
        }
    }
}
fun main(args:Array<String>){

    /**
     * *使用函数类型*
     * 函数类型和数据类型一样,可用于定义变量,也可用作函数的形参类型,还可作为函数的返回值类型
     *
     * 函数类型组成:'函数的形参列表' + '->' + '返回值类型'
     * **/
    var functype:(String,Int) -> String

    //直接访问一个函数的函数引用
    functype = ::foooo2
    print(functype("Tom",19))

    //只要被赋值的函数类型与functype的变量类型一致,程序可以赋值成功
    functype = ::foooo3
    print(functype("User",178))
    print("********************************************************\n")

    /**使用函数类型作为形参类型**/
    var data = arrayOf(4,5,6,7,8,9)
    print("元数据:${data.contentToString()}\n")
    print("计算数组元素的平方:${map(data,::square).contentToString()}\n")
    print("计算数组元素的立方:${map(data,::cube).contentToString()}\n")
    print("计算数组元素阶乘:${map(data,::factorial).contentToString()}\n")

    /**使用函数类型作为返回值类型**/
     var mathFunc = getMathFunc("square")
    print("**${mathFunc(5)}**\n")
    mathFunc = getMathFunc("cube")
    print("**${mathFunc(6)}**\n")
    mathFunc = getMathFunc("factorial")
    print("**${mathFunc(7)}**\n")
}


控制台

Tom***19
paragram1:User,paragram2:178
********************************************************
元数据:[4, 5, 6, 7, 8, 9]
计算数组元素的平方:[16, 25, 36, 49, 64, 81]
计算数组元素的立方:[64, 125, 216, 343, 512, 729]
计算数组元素阶乘:[24, 120, 720, 5040, 40320, 362880]
**25**
**216**
**5040**

Process finished with exit code 0


相关文章

网友评论

      本文标题:Kotlin 高阶函数笔记(这只是笔记,没有讲解)

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