Kotlin 的函数与方法
在Java 中好像是没有函数这个概念的,都是方法。但是在Kotlin 中函数是一等公民,它可以不依赖于类,如顶级函数。
而方法是指,带接收者的函数 如Object.toString() 。 Object 就是接收者 。XXX.xxx() 的就是方法。
当然函数与方法直接是可以转换的。 例如:python 的self 参数。
class KotlinFuction {
// 这个是方法
fun test(i:Int){
print(i)
}
}
// 这个是函数 ,可以将 接收者 移动到 函数的第一个参数
fun test(ktF :KotlinFuction,i :Int){
print(i)
}
Kotlin 函数引用 与函数的执行
函数引用类似于 C 语言中的函数指针,可以用于函数传递 。 用 :: 表示
按照我们上面的 分类,一种是顶级函数,一种是 带接收者的函数。
class KotlinFuction( var name:String) {
// 这个是方法
fun test(i:Int){
print("$name 年龄是 $i" )
}
}
// 这个是函数
fun testTop(ktF :KotlinFuction,i :Int){
print("${ktF.name} 年龄是 $i")
}
fun main(){
var f1:(KotlinFuction,Int)->Unit = ::testTop
// 他们俩 是同一种函数类型,哈哈哈
var f2:(KotlinFuction,Int)->Unit = KotlinFuction::test
var m = KotlinFuction(" 臭弟弟")
// 通过对象传递 的函数引用 。KotlinFuction 类型 就不在 函数参i数中了
// 相当于函数的第一个参数 已经确定了,就是m 。所以不需要这个参数了 。
var f3: (Int) -> Unit = m::test
// 函数的执行 。按普通方式 。或者 .invoke 方式
f1(KotlinFuction("小王把"),28)
f2.invoke(KotlinFuction("小李子"),21)
f3.invoke(10)
}
可变参数的函数
通过 vararg 关键字来声明 。 例如各种 XXXOf 的 工厂方法
fun plus(vararg nums:Int ){
var sum = 0;
for(i in nums){
sum += i
}
print(sum)
}
函数声明参数的默认值
fun defFun( i:Int ,j:String ,z:Long = 0){
j = "hello" // 不会编译通过 ,Kotlin 的形参不 能重新赋值
}