函数声明的几种方式
常规函数声明
fun main(args:Array<String>){
// 需要注意的是必须先声明函数,后调用函数。
// var add1 = fun(a: Int, b: Int): Int {
// return a + b
// }
println("调用add函数:"+add(3,4))
println("调用add1函数:"+add1(3,4))
}
fun add(a: Int, b: Int): Int {
return a + b
}
var add1 = fun(a: Int, b: Int):Int{
return a + b
}
函数的变形
fun main(args: Array<String>) {
// 需要注意的是必须先声明函数,后调用函数。
// var add1 =fun(a: Int, b: Int): Int = a + b
println("调用add函数:"+add(3,4))
println("调用add1函数:"+add1(3,4))
}
fun add(a: Int, b: Int): Int = a + b
var add1 =fun(a: Int, b: Int): Int = a + b
函数作用域问题
fun main(args: Array<String>) {
// 参数和参数类型都在等号右边
var add = {a: Int, b: Int -> a + b }
// 参数和参数类型分别的等号左右两侧
var add1: (Int, Int) -> Int = { a, b -> a + b }
// 优先执行作用域小的或者交作用域近的函数
println("调用add函数:" + add(3, 4))
println("调用add1函数:" + add1(3, 4))
}
//函数名相同,但是作用域不同,可以同时存在
fun add(a: Int, b: Int): Int = a + b + 1
var add1 =fun(a: Int, b: Int): Int = a + b + 1
看打印结果就可以区分了
调用add函数:7
调用add1函数:7
注意:如果用fun声明和var声明的函数名字相同,则会优先使用var声明的函数
区别是:var声明方式可以放在某个函数内部,这样函数的作用域就不同了
参数默认值-具名参数
很多语言在定义函数的时候,可以直接给参数设置默认值,Kotlin语言也可以。
但是调用的时候需要注意,如果设置了默认值的参数并不是都在参数尾部,那就需要使用具名参数的传参方式。
fun main(args: Array<String>) {
//常规调用
commonFun("张三",25)
//设置默认值的参数非第一个参数的函数
defaultFun("李四")
//具名参数,调用设置默认值参数在中间的函数
defaultFun("王五",height = 170)
//具名参数,设置默认值的参数在第一个的函数
firstDefaltFun(age = 21,height = 175)
//设置了默认值也可以传递参数,这样默认值就无效了
firstDefaltFun("大飞",20,180)
}
//常规函数
fun commonFun(name:String,age:Int){
println("姓名:$name ,年龄:$age")
}
//参数默认值在尾部的函数
fun defaultFun(name:String,age:Int=26){
println("姓名:$name ,年龄:$age")
}
// 函数重载,参数默认值在中间的函数
fun defaultFun(name:String,age:Int=26,height:Int){
println("姓名:$name ,年龄:$age , 身高:$height cm")
}
//默认值在首位的函数
fun firstDefaltFun(name:String="赵六",age: Int,height: Int){
println("姓名:$name ,年龄:$age , 身高:$height cm")
}