在本文中,您将了解函数。什么是函数,其语法以及如何在Kotlin中创建用户函数。
函数用于将大型程序分解为较小的模块化块。例如,您需要根据用户的输入来创建圆圈并为其着色。您可以创建两个函数来解决此问题:
createCircle() 函数 - 用来创建圆圈
colorCircle() 函数 - 用来填充颜色
将复杂的程序划分为较小的组件,可以使我们的程序更有条理和更易于管理。
此外,它避免重复并使代码可重用。
根据用户定义的函数还是标准库中的函数,有两种类型的函数:
Kotlin 标准库函数
用户定义的函数
标准库函数是Kotlin中的内置函数,可以随时使用。例如,
print() 是一个库函数,可将消息打印到标准输出流(监视器)。
sqrt() 返回数字的平方根(Double值)
fun main(args: Array<String>) { var number = 5.5 print("Result = ${Math.sqrt(number)}") }
运行该程序时,输出为:
Result = 2.345207879911715
这是Kotlin标准库的链接,供您浏览。
如前所述,您可以自己创建函数。这些函数称为用户定义函数。
在使用(调用)函数之前,需要先对其进行定义。
在Kotlin中定义函数的方法如下:
fun callMe() { //函数体 }
要在Kotlin中定义函数,请使用 fun 关键字。然后是函数的名称(标识符)。在这里,函数的名称为callMe。
在上面的程序中,括号( )为空。这意味着此函数不接受任何参数。您将在本文的后面部分了解参数。
花括号内的代码{ }是函数的主体。
您必须调用该函数才能在函数体内运行代码。这是如何做:
callme()
该语句调用先前声明的函数callMe()。
fun callMe() { println("从callMe()函数打印。") println("这很酷(还在从里面打印)。") } fun main(args: Array<String>) { callMe() println("从callMe()函数进行外部打印。") }
运行该程序时,输出为:
从callMe()函数打印。 这很酷(还在从里面打印)。 从callMe()函数进行外部打印。
上面代码中的 callMe() 函数不接受任何参数。
另外,该函数不返回任何值(返回类型为Unit)。
让我们来看另一个函数示例。该函数将接受参数并返回一个值。
fun addNumbers(n1: Double, n2: Double): Int { val sum = n1 + n2 val sumInteger = sum.toInt() return sumInteger } fun main(args: Array<String>) { val number1 = 12.2 val number2 = 3.4 val result: Int result = addNumbers(number1, number2) println("result = $result") }
运行该程序时,输出为:
result = 15
在此,在函数调用期间将两个Double类型的参数number1和number2传递给addNumbers()函数。 这些参数称为实际参数(实参)。
result = addNumbers(number1, number2)
参数n1和n2接受传递的参数(在函数定义中)。这些参数称为形式参数(或形参)。
在Kotlin中,参数之间用逗号分隔。同样,形式参数的类型必须显式键入。
注意,实际参数和形式参数的数据类型应该匹配,即,第一个实际参数的数据类型应该与第一个形式参数的类型匹配。同样,第二个实际参数的类型必须与第二个形式参数的类型相匹配,依此类推。
这里,
return sumInteger
是return语句。此代码终止addNumbers()函数,程序控制跳至main()函数。
在程序中,sumInteger从addNumbers()函数返回。该值已分配给变量result。
注意,
sumInteger和result均为Int类型。
函数的返回类型在函数定义中指定。
//返回类型为 Int fun addNumbers(n1: Double, n2: Double): Int { ... .. ... }
如果函数不返回任何值,则其返回类型为Unit。 如果返回类型为 Int,则可以在函数定义中指定返回类型。
fun main(args: Array<String>) { println(getName("John", "Doe")) } fun getName(firstName: String, lastName: String): String = "$firstName $lastName"
运行该程序时,输出为:
John Doe
在此,getName()函数接受两个String参数,并返回String。
如果函数返回单个表达式(如上例所示),则可以省略函数体的花括号{},并在 = 符号之后指定主体。
在这种情况下,显式声明返回类型是可选的,因为返回类型可以由编译器推断。 在以上示例中,您可以替换
fun getName(firstName: String, lastName: String): String = "$firstName $lastName"
等同于:
fun getName(firstName: String, lastName: String) = "$firstName $lastName"