1、函数定义
// 下边定义了main函数
fun main() {
}
2、函数的类型
// foo函数定义
fun foo () {} // 对应无参类型 () -> Unit
fun foo (a: Int):String {} // 对应有参类型 (Int) -> String
3、函数的引用
函数的引用类似C语言中的函数指针,可用于函数传递:
fun foo() {} // 如果想引用foo函数,需要使用 ::foo
fun foo(a:String):Any {} // 如果想引用有参foo函数,跟上边一样需要使用 ::foo
// 类中方法的引用,需使用 Foo::bar
class Foo{
fun bar(){}
}
实际引用例子:
fun foo() {}
fun bar(a:String):Any { return "Hello"}
class Foo {
fun bar(a:String):Any { return "Hello"}
}
// 引用foo函数
val fn:() -> Unit = ::foo
// 引用bar函数
val bfn:(String) -> Any = ::bar
// 引用Foo类的bar方法
val fooFn:(Foo, String) -> Any = Foo::bar
// ================================================================
// 上边类中的方法引用,也可以用下面这种形式
val f = Foo() // 实例化类
val fbar = f::bar // 使用实例化的对象f::bar方法,也可以引用Foo类中的bar方法
4、函数中的边长参数
// 方法定义
fun main() {
foo("a","b","c")
}
fun foo(vararg a:String) {
println(a.toList()) // 把传进来的参数转成List [a,b,c]
// 打印参数
println(a.joinToString()) // a,b,c
}
kotlin内置的函数参数中很多都是定义的变长参数,如 listOf:
public fun <T> listOf(vararg elements: T): List<T>
5、函数的伪多返回值
多返回值,其实就是返回类型下手,比如返回Pair类型:
// 方法定义
fun main() {
// 函数调用方式1 -> 解构方式取值
val (r1, r2) = foo()
println("r1:$r1,r2:$r2") // r1:a,r2:b
// 函数调用方式2 -. 正常取值
val r:Pair<String, String> = foo()
println("r:$r") // r:(a, b)
}
fun foo():Pair<String,String> {
return Pair("a", "b")
}
6、函数默认参数
// 方法定义
fun main() {
foo()
foo("world")
}
// 定义默认参数
fun foo(a:String = "hello"):Unit {
println("a:$a") // a:hello / a:world
}
7、函数具名参数
// 方法定义
fun main() {
foo(b="world") // 使用具名参数,指定传给函数的某个参数
}
// 定义默认参数
fun foo(a:String = "hello", b:String):Unit {
println("$a, $b") // hello, world
}