Kotlin 函数的基本使用

Kotlin 中的函数和 Java 中的方法并不是一个概念。方法是属于函数的一种,在Kotlin里函数属于一等公民。什么是一等公民呢?那就是和对象有着一样的地位,可以被赋值,传递。而方法只是一种只能写在类里面的,供对象调用的函数即有reciever的函数。

Java中只有方法,没有函数。

函数的定义

fun 函数名(参数名:参数类型): 返回类型{}
fun main(args: Array<String>): Unit {
}
//当返回类型为Unit(相当与Java中的void)时,: Unit可以省略,而main函数中的参数可以省略
fun main{}

参数
Koltin中的函数参数是使用Pascal表示法表示,即“name:type” 多个参数之间用逗号隔开。

fun main(args: Array<String>): Unit {
    val m = m("Kotlin", "Hello")
    println(m)
}

fun m(p0: String, p1: String): String {
    return "${p0} ${p1}!"
}
运行结果: Kotlin Hello!

函数的类型

fun foo(){}                 =>   () -> Unit
fun foo(p0:Int): String{}   =>   (Int) -> String

kotlin中因为函数是一等公民所以它有自己的类型,由函数的参数和返回值组成,参数用()括起来,用 -> 连接

class Foo{
    fun bar(p0:Int, p1:String):Any{}
}

函数类型: Foo.(Int,String) -> Any  或者  (Foo,String,Long) -> Any  //Any 相当于Java中的Object

当函数定义在一个类中的时候,需要添加类名,上面两个实际上是一样的,第一种对于熟悉Java的人来说比较容易理解,而从逻辑上来说是将类的对象作为一个参数传递给函数。

函数的引用

函数的引用类似于C语言中的函数指针,可用于函数传递

fun foo(){}                    ==::foo      ==val f: ()->Unit= ::foo
fun foo(p0:String):String{}    ==::foo      ==val g: (String)->String = ::foo

class Fun{
    fun foo(p0:Int):String{}
}
                               ==》  Fun::foo   ==val h: (Fun,Int)->String = Fun::foo
  • ::foo 这种格式相当于对函数的一个指针
  • val f: ()->Unit = ::foo 定义了一个方法指针,它的类型就是函数的类型,可以被相同类型的函数赋值
  • 对于不同类型的函数,相同名称的函数(重载),有相同的引用方法即 ::foo 赋值的时候根据前面的类型来推断是引用的哪个类型的函数

还有一种情况

class Fun{
    fun foo(p0:Int):String{} 
}
                              ==》  Fun::foo   ==val h: (Fun,Int)->String = Fun::foo

val f = Fun()
val h: (Int) -> String = f::foo

这是将类的对象当作参数传进函数,因为已经传进了一个参数,所以Fun可以省略

函数的调用

class Fun {
    fun foo(p0: Int): String {
        return "The number is $p0"
    }
}

fun main(args: Array<String>): Unit {
    val f = Fun()
    val f1 = f.foo(1)
    println(f1)
    println("----------------------------------")
    val f2: (Int) -> String = f::foo
    println(f2(2))
    println("----------------------------------")
    val f3: (Fun, Int) -> String = Fun::foo
    println(f3(f, 3))
}

运行结果:

The number is 1
----------------------------------
The number is 2
----------------------------------
The number is 3

第一种是类似与Java的调用方法
第二种和第三种是使用函数指针的方式,不同的是对象参数传入的时机,一个是在赋值时,一个是在调用时。

如有问题欢迎交流指正😄 😄

参考:
https://www.kotlincn.net/docs/reference/functions.html Kotlin官网
慕课网的Kotlin视频教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值