栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kotlin 的函数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kotlin 的函数

函数的基本概念  函数的基本用法
  • 函数的定义

 其中Unit等价于Java的void函数返回值为Unit,可省略。

函数的参数列表如果是多个参数的话使用逗号分隔。

  • 函数的类型(方法 & 函数)

方法可以认为是函数的一种特殊类型,从形式上,有receiver的函数即为方法, receiver就是类的实例

fun foo1() { TODO() }       // () -> Unit
fun foo2(p0: Int): String { TODO() } // (Int) -> String, 函数接收的是一个Int类型的值,返回的是一个String类型的值

在Kotlin中可以直接定义函数,不用定义在类中;定义在类中的函数其实就是叫方法,属于所在类的方法

// Persion 就是work烦恼歌发的receiver, 也就是说放在一个类里面的函数就是方法
// 想要调用work必须先创建Persion实例
class Persion {
    fun work(age: Int, name: String): Any{
        TODO()
    }
}

函数的引用

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

下面方法中出现函数的重载,在编译的时候会根据调用函数时的参数匹配来判断调用两个方法中的哪一个,如果判断不出来,编译就会报错

fun foo() { TODO() }       // ::foo就是这个函数的引用 , 使用变量接收   val f:() -> Unit = ::foo  /  val f = ::foo
fun foo(p0: Int): String { TODO() } // ::foo就是这个函数的引用, 使用变量接收   val g:(Int) -> String = ::foo  / val g = ::foo

// work方法的引用就是Persion::work, 使用变量接收  val h:(Persion, Int, String) -> Any = Persion::work  / val h = Persion::work
// val h:(Persion, Int, String) -> Any = Persion::work  等价于  val h:Persion.(Int, 
// 还可以这么写: val h: Function3 = Persion::work
String) -> Any = Persion::work
class Persion {
    fun work(age: Int, name: String): Any{
        TODO()
    }
}
  • 绑定receiver的函数引用

函数和方法的区别,方法可以认为是函数的一种特殊类型。从形式上,有receiver的函数就可以叫做方法。receiver就是类的实例,在这个类实例当中的函数,就叫做方法,比如cityBean.getCity(),cityBean就是receiver,getCity()就被叫做方法。

class Person {
    fun work(age: Int, name: String): Any{
        TODO()
    }
}
val person = Person() // person就是对象的实例
val m:(Int, String) -> Any = person::work // person::work(绑定receiver的函数引用)

其实这段代码就像下面这道数学题一样

  •  将引用传递方法参数当中
class Person {
    fun work(age: Int, name: String): Any{
        TODO()
    }
}
val person:(Person, Int, String) -> Any = Person::work

// 方法当中的参数,也是可以传递方法引用的,如下所示传递类里的方法
fun testPerson(parameter: (Person, Int, String) -> Any) {
    //在这里调用方法
    parameter(Person(), 21, "jacob")
    parameter.invoke(Person(), 21, "jacob")
}

// 将引用传递方法当中
testPerson(person)
  • 变长参数

这里的args参数就跟listOf(1,2,3)是一样的

fun main() {
    cityName("1", "2", "3")  // 调用后输出结果是: [1, 2, 3]
}

// 变长参数,用vararg标识,都是String类型
fun cityName(vararg args: String) {
    println(args.contentToString())
}
  • 多返回值

多返回值是指,函数的返回值可以是多个的并且个数和类型是确定的

fun main() {
    val (a, b, c) = multiReturnValues()
    println(a)
    
    val m = a + b  // m为Long类型
    val n = b + c  // n为double类型
    println(m) // 输出结果: 4
    println(n)  // 输出结果:7.0

}


fun multiReturnValues(): Triple {
    return Triple(1, 3L, 4.0)
}
  • 默认参数
fun main() {
    defaultParameter(5, "Hello", 5L)
    defaultParameter(6, "hello")  // 最后一参数不传,就会使用默认值
    
    // 不传第一个和最后一个,指定y代表的意思是给形参y赋值
    // 如果不指定,编译器就会不知道"hello"是赋值给哪个参数的
    defaultParameter(y = "hello")  // 最后一参数不传,就会使用默认值

}

// 默认参数,默认值必须放到最后,当不传的时候,最后参数是就会按照顺序依次使用默认值(有默认值的情况下)
fun defaultParameter(x: Int = 5, y: String, z: Long = 0L) { 
    println(x)
    println(y)
    println(z)
}

匿名函数 Lambda SAM转换

高阶函数 常见的高阶函数 函数式编程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/315329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号