Kotlin笔记 第六章 (二)高阶函数.md

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Leslie_LN/article/details/82805084

1、函数类型

Kotlin融合了面向过程的特征,而我们知道面向过程中函数和基本数据(整数、布尔等)都是一样的地位,同样也具有数据类型;既可定义变量,也可以当做函数的形参类型;

函数类型:有参数列表、->、返回值类型组成的;

如:

	fun foo(a:int,name:String):String{}

所以该函数类型就是:(Int,String)->String

当做变量:

1、定义变量:var myFun:(Int)->Unit

2、定义函数:fun foo(a:Int){}

3、将函数赋值给变量:myFun=::foo

***注意:***访问一个函数(数据)的引用,需要在函数名前添加两个“::”;
"函数名()"表示的调用函数

1.1、 函数类型的变量作为函数形参

当定义一个函数,该函数的大部分逻辑都已确定,但某个逻辑可能需要根据不同情况需要动态改变,也就是需要动态传入这些代码,这时传入不同的函数作为参数,实现不同的逻辑;



	如: fun calulate(a:Int,b:Int){
		

		var result:Int=0;

		//1.计算和

		//2.计算乘级


		}

就可以定义一个函数类型的形参,来实现不同逻辑。写成这样:

	fun calulate(a:Int,b:Int,sum:(Int,Int)->Int){

		..........
			sum(a,b)

		}



	fun sum(a:int,b:Int):Int{
		
		return a+b
	
		
	}


调用:
	calulate(2,3,::sum)

这样就随着实际传入的函数

1.3、函数类型的变量作为函数返回值

fun calculate(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>) {
    val squar = calculate("square")
    println(squar(3))


}

这里补充一点的是:在calculate()函数中定义了三个局部变量,那么三个局部函数的作用域只限于这个函数内使用;但是将局部函数赋值给变量,这三个局部变量的作用域就和这变量的作用域一样,如果这变量时全局变量,那么自然局部函数的作用域也变成了全局;

猜你喜欢

转载自blog.csdn.net/Leslie_LN/article/details/82805084