Kotlin 细节五:函数

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 的形参不 能重新赋值
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值