Kotlin 函数
kotlin中函数的定义是通过关键字fun来完成的。其基本的语法格式如下:
fun funName(param : paramType,..) : returnType{
function body
}
示例:
fun printHello(username: String): String {
print("Hi,$username ,Welcome to Kotlin!\n")
return "Mr $username"
}
var username = "Jack"
print(printHello(username))
输出:
Hi,Jack ,Welcome to Kotlin!
Mr Jack
参数
函数参数使用 Pascal 表示法定义,即 name: type。参数用逗号隔开。每个参数必须有显式类型:
fun printHello(username: String, exponent: Int) { …… }
在函数的使用过程中,我们经常会使用到带默认参数的函数,函数参数可以有默认值,当省略相应的参数时使用默认值。与其他语言相比,这可以减少重载数量:
fun defaultParams(stuCount: Int = 10, grade: Int) {
print("Grade$grade have $stuCount students \n")
}
这是一个带有默认参数的函数,我们试着按照下面的方式调用函数:
defaultParams(15)
结果产生了编译错误:
从上面的图中大家也都知道原因了,在匹配函数的参数时与参数的申明顺序有关。当然了,若果我们把默认参数放在函数参数的末尾就不会有问题了。
fun defaultParams(grade: Int, stuCount: Int = 10)
编译器获得我们传入的参数,第一个赋值给参数grade,然后发现stuCount参数并没有值传递进来就会使用默认值。
那么还有其他的方法可以解决这个问题吗?
可以在调用函数时使用命名的函数参数,使用命名参数我们可以使代码更具有可读性,当一个函数有大量的参数或默认参数时这会非常方便。
拿上面的例子来说,我们只需要在传入参数的时候指定给哪个参数传递即可。
在上面的例子中,我们通过定义函数时的参数名称来显示的指定该参数值。
接下来我们需要任何一个新的关键字:
vararg --允许一个参数传入可变数量的参数
也就是说我们传递一个可变的参数时,可以使用vararg关键字声明即可。当然了,习惯性的写法是将可变参数放在末尾,如果有特殊需求大家记得可以使用刚刚提到的命名参数来使用。
fun variedParamet(language: String, vararg students: String) {
print("Language:$language\nStudents:")
students.iterator().forEach {
print("$it ")
}
}
variedParamet("Kotlin", "zhaosi", "zhangsan", "wangwu")
输出:
Language:Kotlin
Students:zhaosi zhangsan wangwu
由于students是一个变长参数,我们可以使用for等可以语句循环的处理我们需要的数据。
我们还可以通过使用星号操作符(*)将可变数量参数(vararg) 以命名形式传入:
variedParamet("Kotlin",students = *arrayOf("zhaosi","zhangsan","wangwu"))
写法是等价的,当然了由于students 在末尾即使不使用命名参数也是可以正常运行的。
函数返回值
如果一个函数不返回任何有用的值,它的返回类型是 Unit。Unit 是一种只有一个值——Unit 的类型。这个值不需要显式返回。
我们可以看下这个Unit类型到底是什么东西,说白了其实就是我们常见的void类型:
/**
* The type with only one value: the Unit object. This type corresponds to the
* `void` type in Java.
*/
public object Unit {
override fun toString() = "kotlin.Unit"
}
很简单就是一个字符串,如果你试着输出它的结果:
kotlin.Unit
示例:
fun back() {
print("back function\n")
}
单表达式函数
当函数返回单个表达式时(也就是只有一条语句),可以省略花括号并且在 = 符号之后指定代码体即可:
fun double(x: Int): Int = x * 2
当返回值类型可由编译器推断时,显式声明返回类型是可选的:
fun double(x: Int) = x * 2
显式返回类型
具有块代码体的函数必须始终显式指定返回类型,除非他们旨在返回 Unit,在这种情况下它是可选的。 Kotlin
不推断具有块代码体的函数的返回类型,因为这样的函数在代码体中可能有复杂的控制流,并且返回类型对于读者(有时甚至对于编译器)是不明显的。
还没有评论,来说两句吧...