kotlin中的函数定义和java中有着很大的区别
其是使用fun来定义函数的
1、普通函数
如下所示,其中fun开头表示定义的为函数,max表示函数名,value表示参数,Int表示参数类型,Double表示返回值的类型,
当要使用到多个参数时,中间用逗号隔开。
fun max(value:Int):Double{
return (value*1.0)
}
fun max2(value0:Int,value1:Int,value2:Double):Double{
return //value
}
同时,函数也可以写成一个表达式的形式,如,
fun max(value:Int,value1:Int):Int=if(value>value1) value else value1
当返回值没有申明的时候,它会自己返回Unit类型数据,即,
fun max():Unit{
//do you want
}
这里的Unit可以省略,即,
fun max(){
//do you want
}
2、泛函数
fun <T>name(value:T):T{
//do you want
}
//使用
name<T>(value)
其中T表示数据的类型,如Double,Int等,其它和普通函数没有差别,在调用时如上面所示,但是其中的<T>可以省略掉,即,
name(value)
3、函数的参数可变
当函数的参数要是可变时,可用vararg关键字,来对参数进行修饰,即,
fun <T>min(vararg value:T):T{
//do you want
}
其中的参数value表示长度不定的一个数组,调用时,和普通的数组方式一样
4、匿名函数和lambda函数
它们的意义比较相似,但表示方式有所不同,
匿名函数:
fun(value:Int):Int=0
lamabda函数:
{value->function}
其中value表示函数的参数可以有多个,中间用逗号隔开,function表示函数要实现的具体功能如,
var sum={x:Int,y:Int ->x+y }
5、高阶函数
其是指函数的参数可以为一函数,如
fun test(value:Int, f:()->Int):Int{
return value+f()
}
函数test的参数有两个,第一个是类型为Int的变量,另一个是函数名为f的函数,“()”表示传入的函数没有参数,“->”后面的Int表示
函数的返回类型是Int.具体使用方法,可见下列:
fun test(value:Int,f:(Int,Int)->Int):Int{
return value+f(1,2)
}
//1)普通函数
fun sum(x:Int,y:Int):Int{
return x+y
}
test(3,::sum) //输出6
//2)匿名函数
test(3,fun(x:Int,y:Int):Int=x+y) //输出6
//3)lamabda函数
test(3,{x:Int,y:Int->x+y})
6、中缀函数和内联函数
中缀函数是用关键字infix修饰的,一般与类并用,如,
infix fun Int.gh(value:Int):Int{
return this+value
}
//调用
2.gh(3) //or
2 gh 3
内联函数一般使用关键字inline来修饰的,调用函数时直接引入函数所代表的表达式,如,
inline fun f(x:Int,y:Int):Int{
return x+y
}
其一般使用于比较短的函数体。
7、尾递归函数
其是用关键字tailrec修饰的,译器就会对代码进行优化, 消除函数的递归调用, 产生一段基于循环实现的, 快速而且高效的代码。如,
tailrec fun tesH(value:Int):Int{
if(x<=0)
return 0
else return value*tesH(value-1)
}