Kotlin语法快速入门-函数(4)

ops/2024/10/20 19:09:50/

Kotlin语法快速入门-函数(4)

文章目录

  • Kotlin语法快速入门-函数(4)
    • 四、函数
      • 1、函数定义
      • 2、infix关键字
      • 3、参数省略
      • 4、函数类型参数
      • 5、多参数--vararg

四、函数

1、函数定义

kotlin">fun 函数名(参数: 类型) :返回值类型{//函数体return 返回值
}
kotlin">fun main() {a()
}fun a() {}

像上述的代码,返回值类型可以省略,函数会自动推导,如果没有返回值,则默认返回Unit(等价于Java中的void)。

image-20240417173716908

加法函数:

kotlin">fun main() {println(sum(1,2))
}fun sum(a: Int, b: Int): Int {return a + b
}

可以简写,如果只有一行:

kotlin">fun sum(a: Int, b: Int): Int = a + b

kotlin">fun sum(a: Int, b: Int) = a + b

2、infix关键字

infix 是一个关键字,用于定义中缀函数(Infix Functions)。中缀函数是 Kotlin 提供的一项有用的功能,可以使代码更加清晰和易读,尤其是在某些领域特定语言中,它可以改善代码的可读性和表达能力。

kotlin">fun main() {//以下三种写法结果相同。println(1.sum(2))println(1 sum (2))println(1 sum 2)
}
infix fun Int.sum(a: Int) = this + a
  • 中缀函数必须是成员函数或扩展函数。
  • 中缀函数必须只有一个参数。
  • 参数不能是可变参数(varargs)。

可以展现多态等面向对象的一些特性,例如:(分别调用不同的同名函数==>多态)

kotlin">fun main() {println(1 sum 2)println(1.1F sum 2)
}
infix fun Int.sum(a: Int) = this + a
infix fun Float.sum(a: Int) = this + a

3、参数省略

与js的语法有点像,传参数的时候可以设置默认值,如果传入则覆盖,没有传入则使用默认值。

kotlin">fun main() {println(sum(1))
}
fun sum(a: Int, b: Int = 3) = b + a

上述代码没有传入b的值,就取得默认值3

亦可使用b = 1, a = 2来忽略参数顺序:

kotlin">fun main() {println(sum(b = 1, a = 2))
}
fun sum(a: Int, b: Int = 3) = b + a

4、函数类型参数

kotlin">fun main() {sum(b = 1, a = 2, c = { println(it) })
}fun sum(a: Int, b: Int, c: (Int) -> Unit): Int {val result = b + a // 计算 a 和 b 的和c(result)          // 调用传入的函数 c,传入结果值并执行其逻辑return result      // 返回计算结果
}

main 函数内部调用了名为 sum 的函数,传入了三个参数:

  • 参数 c 是一个类型为 (Int) -> Unit 的函数类型参数。该类型的含义是接收一个 Int 类型的输入参数并返回 Unit 类型(相当于 Java 中的 void)。传入的匿名函数 { println(it) } 实现了这一功能,其中 it 是对传入参数的隐式引用,println 函数用于打印传入的整数到标准输出。

定义了一个名为 sum 的函数,它接受以下三个参数:

  • a: Int:一个整数参数。
  • b: Int:另一个整数参数。
  • c: (Int) -> Unit:一个函数类型参数,如上所述,接收一个整数并返回无具体值(Unit)。

只有函数类型参数的简写:

kotlin">fun main() {sum { //()圆括号可以省略println(it)}
}fun sum(c: (Int) -> Unit) { //这里必须是lambda表达式c(3)          // 调用传入的函数 c,传入结果值并执行其逻辑
}

5、多参数–vararg

kotlin">fun main() {sum("1", "2", "3")
}//多参函数
fun sum(vararg list: String) {list.forEach {println(it)}
}

上述写法不太友好,换个写法:

kotlin">fun main() {var arr = arrayOf("1", "2", "3")sum(*arr) //通过*展开参数
}//多参函数
fun sum(vararg list: String) {list.forEach {println(it)}
}

与其他参数混合:(当然,写法不唯一)

kotlin">fun main() {var arr = arrayOf("1", "2", "3")sum("1", list = arr)
}//多参函数
fun sum(a: String, vararg list: String) {list.forEach {println(it)}
}

http://www.ppmy.cn/ops/18975.html

相关文章

【golang学习之旅】深入理解字符串string数据类型

系列文章 【golang学习之旅】报错:a declared but not used 【golang学习之旅】Go 的基本数据类型 目录 系列文章使用示例string的底层数据结构关于字符串复制字符串是不可变的如何高效的进行字符串拼接? 使用示例 Go 语言中的字符串只是一个只读的字节…

【数据结构(邓俊辉)学习笔记】向量03——无序向量

文章目录 0.概述1.元素访问2.置乱器3.判等器与比较器4.无序查找4.1 判等器4.2 顺序查找4.3 实现4.4 复杂度 5. 插入5.1 算法实现5.2 复杂度分析 6. 删除6.1 区间删除6.2 单元删除6.3 复杂度 7. 唯一化7.1 实现7.2 正确性7.3 复杂度 8. 遍历8.1 实现8.2 复杂度 9. 总结 0.概述 …

Python实现自动化的服务器部署和配置管理库之pyinfra使用详解

概要 在现代软件开发中,自动化部署和配置管理变得越来越重要。Python pyinfra库是一个强大的工具,可以帮助开发者实现自动化的服务器部署和配置管理。本文将介绍pyinfra库的安装、特性、基本功能、高级功能、实际应用场景以及总结。 安装 首先,来看一下如何安装pyinfra库。…

WordPress缓存插件有哪些?好用的缓存插件分享

目前WordPress缓存插件有:WP Rocket、WP Super Cache、W3 Total Cache、Sucuri、NitroPack、SiteGround Optimizer、LiteSpeed Cache、WP-Optimize、Hummingbird、Cache Enabler、Comet Cache。 在当今的数字世界中,拥有一个高效的网站对于吸引和留住用…

总结一期Redis

redis 好处 主要就是缓存热点数据的,减轻服务器压力, 在详情页还有单点登录都用到过. 我们在项目的活动模块用过,APP端的首页展示的数据都是使用redis存储的热点数据,因为用户进入APP的时候首先进入是首页,使用的hash数据类型存储首页信息. 为什么快 主要有这么几点,第一呢就re…

【动态规划】Leetcode 152. 乘积最大子数组【中等】

乘积最大子数组 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 示例 1: 输入: nums [2,3,-2,4] 输出: 6 …

Windows系统下将MySQL数据库表内的数据全量导入Elasticsearch

目录 下载安装Logstash 配置Logstash配置文件 运行配置文件 查看导入结果 使用Logstash将sql数据导入Elasticsearch 下载安装Logstash 官网地址 选择Windows系统,需下载与安装的Elasticsearch相同版本的,下载完成后解压安装包。 配置Logstash配…

【AI面试】工作和面试过程中,经常遇到的其他问题汇总二(持续更新)

本篇是延续第一篇:【AI面试】工作和面试过程中,经常遇到的其他问题汇总一(持续更新) 如果你还没有看过上一篇文章,建议先去看看,尽管这两篇文章没有什么交集。 一、在CNN和transformer的训练过程中,学习率的调整,有什么经验? 在训练卷积神经网络(CNN)和Transform…