Kotlin 简明教程
Kotlin - Functions
Kotlin 是一种静态类型语言,因此,函数在它中发挥着重要的作用。我们非常熟悉函数,因为我们在前面章节的示例中一直使用它们。 function 是为了执行一个特定任务而编写的一段代码块。所有现代编程语言都支持使用函数,并且它们也被称为 methods 或 subroutines 。
在更广泛的层面,一个函数会接受一些输入,称为 parameters ,对这些输入执行某些操作,最后返回一个值。
Kotlin Built-in Functions
Kotlin 提供了许多内置函数,我们在示例中已经使用了一些内置函数。例如, print() 和 println() 是我们用来向屏幕打印输出的最常用的内置函数。
User-Defined Functions
Kotlin 允许我们使用关键字 fun 创建我们自己的函数。用户定义的函数会接受一个或多个参数,执行操作,并将该操作的结果作为值返回。
Unit-returning Functions
如果一个函数没有返回一个有用的值,则它的返回类型为 Unit 。Unit 是仅有一个值为 Unit 的类型。
fun sumTwo(a:Int, b:Int):Unit{
val x = a + b
println( x )
}
Unit 返回类型声明也是可选的。上面的代码等效于:
fun sumTwo(a:Int, b:Int){
val x = a + b
println( x )
}
Kotlin Tail Recursion
如果一个函数调用自身是它执行的最后一个操作,那么此递归函数有资格获得 tail recursion 。
Example
下面是一个使用尾递归来计算数字 10 阶乘的 Kotlin 程序。在这里,我们需要确保乘法是在递归调用之前完成的,而不是之后。
fun main(args: Array<String>) {
val a = 4
val result = factorial(a)
println( result )
}
fun factorial(a: Int, accum: Int = 1): Int {
val result = a * accum
return if (a <= 1) {
result
} else {
factorial(a - 1, result)
}
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
24
Higher-Order Functions
高阶函数是一种将另一个函数作为参数和/或返回函数的函数。
Example
下面是一个将两个整型参数 a 和 b 作为参数并另外将另一个函数 operation 作为参数的函数:
fun main(args: Array<String>) {
val result = calculate(4, 5, ::sum)
println( result )
}
fun sum(a: Int, b: Int) = a + b
fun calculate(a: Int, b: Int, operation:(Int, Int) -> Int): Int {
return operation(a, b)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
9
在这里,我们调用 higher-order function ,传递两个整型值和函数参数 ::sum 。这里, :: 是 Kotlin 中按名称引用函数的符号。
Kotlin Lambda Function
Kotlin lambda 是一个没有名称且用大括号 {} 定义的函数,它可以采用零个或多个参数和函数主体。
函数的主体写在变量后(如果有的话),后面跟 → 运算符。
Kotlin Inline Function
一个 inline 函数由 inline 关键字声明。使用内联函数可以提高高阶函数的性能。内联函数告诉编译器将参数和函数复制到调用站。
Example
fun main(args: Array<String>) {
myFunction({println("Inline function parameter")})
}
inline fun myFunction(function:()-> Unit){
println("I am inline function - A")
function()
println("I am inline function - B")
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
I am inline function - A
Inline function parameter
I am inline function - B