函数声明
函数的基本组成部分包括:名称、入参、返回值和函数体,使用fun关键字定义函数,定义形式为:
fun methodName(param: paramType): ReturnType {
...
}
无参无返回值函数
fun func(){
println("hello world!")
}
有入参和返回值的函数
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
语句和表达式
这里解释下,刚学习Kotlin看到上面直接return if
可能有点懵。Kotlin中if
是表达式,不是语句。语句和表达式的最大的区别在于,表达式有值,语句是没有值。因此看上面代码,直接return的就是if
表达式,这也是和Java代码不同的地方。
Kotlin中除了(for
、do
、do/while
)这种循环结构,大多数都是控制结构都是表达式。而在Java中所有的控制语句都是语句。
声明优化
当函数体只有一行代码的时候,可直接去掉大括号用=,声明方式优化如下:
fun max(a: Int, b: Int): Int = if (a > b) a else b
由于Kotlin存在类型推导,返回值类型也可省略,声明方式优化如下:
fun max(a: Int, b: Int) = if (a > b) a else b
函数调用:
fun main() {
println(max(12, 56))
}
默认值参
如果不打算传入参数,可以预先给参数指定默认值。经常会用在入参多并且不经常变化的场景。看个例子:
fun main() {
printStudentInfo("lucy", 7, 2)
printStudentInfo("Jack")
}
fun printStudentInfo(name: String, age: Int = 6, grade: Int = 1) {
println("name :$name | age :$age | grade :$grade")
}
//运行结果
name :lucy | age :7 | grade :2
name :Jack | age :6 | grade :1
打印学生信息,年级默认值是一年级,一年级孩子大部分是6岁,因此设置默认值为6,设置好以后,函数的入参如果和默认相同只传名字即可。
具名函数参数
当函数的入参数量比较多的时候,我们在传参的时候经常会在入参顺序上出错,Kotlin中在传递入参的时候,可以指明具体的参数名称。看下使用;
fun main() {
printStudentInfo(age = 7, name = "Jack")
}
fun printStudentInfo(name: String, age: Int = 6, grade: Int = 1) {
println("name :$name | age :$age | grade :$grade")
}
还是上面的例子,在传递参数的时候就可以按上面的方式指明参数名和参数值。并且如果使用命名值参,可以不用管值参的顺序。