函数
fun 函数名(参数名:数据类型):Unit{
//函数体
}
fun 函数名(参数名:数据类型):表达式
//举例:
fun SayHi(name:String){println("hi, $name")}
fun SayHi(name:String)=println("hi, $name")
Unit相当于Java中的Void,如果有返回值就将Unit换成要返回的数据类型。
匿名函数
匿名函数与常规函数一样,只是省略了函数名称而已:
fun (参数列表)//如果不赋值给一个变量是会报错的
val SayHi=fun (name:String)=println("hi,$name")
函数参数
具名参数
1.给函数的实参附上形参
fun sum(arg1:Int,arg2:Int)=arg1+arg2
//使用sum函数如下,明确的说明了5要给arg2,2给arg1,所以传递的参数对应顺序也可以打乱
sum(arg2=5,arg1=2)
可变参数
1.某个参数可以接受多个值
2.可以不为最后一个参数
3.如果传参的时候有歧义,需要使用具名参数指定
//vararg ints:Int表示一个Int类型的可变参数
fun hello(vararg ints:Int,name:String){
ints.forEach(::println)
println(name)
}
//调用方法,Java中的可变参数只能放在最后一个,而kotlin中的可变参数因为有具名参数的存在可以放在任意的位置。
hello(1,2,3,4,5,name="呵呵")
默认参数
如果某个参数经常需要传递一个固定的值,那么就可以在定义函数时给其中的参数把值给定。如下
//直接给第一个参数给定30的值
fun hello(name:String,data:Int=30){
ints.forEach(::println)
println(name)
}
//使用方法,最后一个参数已经给定的30,这里就不用传了
hello("你好")
ps : 1.函数功能要单一
2.函数名要做到顾名思义
3.参数个数不要太多
Lambda表达式
Lambda表达式其实就时匿名函数
写法:{[参数列表]->[函数体,最后一行是返回值]}
fun sum(a:Int,b:Int)=a+b
//转换成Lambda就是
val sum={a:Int,b:Int -> a+b}
//a:Int,b:Int是Lambda表达式的参数类型,a+b就是返回值,这里Lambda表达式的类型是(Int,Int)->Int
//用法 println(sum(1,2))和println(sum.invoke(1,2))是一样的,invoke是一个运算符重载的方法
Lambda类型举例
1.()->Unit
无参,返回值是Unit
2.(Int)->Int
传入整型,返回值是整型
3.(String,(String)->String)->Boolean
传入字符串,Lambda表达式,返回Boolean