IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin 的函数 -> 正文阅读

[移动开发]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, Int, String, Any> = 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<Int, Long, Double> {
    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转换

高阶函数

常见的高阶函数

函数式编程

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:34:18  更:2021-10-12 23:34:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:38:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码