Kotlin Academy · 课时

中缀函数

可读的函数调用

第 1 / 4 课13 个步骤

中缀函数 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

什么是中缀函数

中缀函数可以省略点号和括号来调用:a func b。请使用 infix 关键字标记它。

infix fun Int.times2(factor: Int) = this * factor

fun main() {
    println(3 times2 4)
}

中缀函数的规则

中缀函数必须是成员函数或扩展函数,且必须恰好接受一个参数;该参数不能是可变参数,也不能有默认值。

infix fun Int.plusBy(other: Int) = this + other

fun main() {
    println(5 plusBy 7)
}

内置中缀函数

许多标准函数都是中缀函数:to(构建二元组)、and、or、shl,以及用于范围的 until、downTo 和 step。

fun main() {
    val pair = "key" to 42
    println(pair)
    for (i in 1 until 4) print(i)
}

使用 to 构建二元组

熟悉的 "a" to 1 映射语法,其实只是返回二元组的中缀 to 函数。

fun main() {
    val map = mapOf(1 to "one", 2 to "two")
    println(map[2])
}

作为成员函数的中缀函数

中缀函数可以是成员函数,让您能够编写流畅的领域表达式。

class Money(val cents: Int) {
    infix fun add(o: Money) = Money(cents + o.cents)
}

fun main() {
    val total = Money(100) add Money(50)
    println(total.cents)
}

可读性优先

当调用读起来像一句话时,中缀函数最有价值。请选择类似动词的名称,让 a name b 自然流畅。

infix fun String.repeatedTimes(n: Int) = this.repeat(n)

fun main() {
    println("ab" repeatedTimes 3)
}

中缀调用的优先级

中缀调用的优先级低于算术运算,但高于比较运算。混合使用时请添加括号,以保持清晰。

infix fun Int.combine(o: Int) = this * 10 + o

fun main() {
    println(1 combine 2 + 3)
}

this 接收者

在中缀扩展函数中,this 是左操作数;参数是右操作数。

infix fun Int.minus2(o: Int) = this - o

fun main() {
    println(10 minus2 3)
}

链式调用中缀函数

中缀调用是左结合的,因此您可以将它们链式连接起来。

infix fun Int.then(o: Int) = this + o

fun main() {
    println(1 then 2 then 3)
}

避免过度使用中缀函数

中缀函数会省略点号和括号,对于不明显的操作,这可能会降低清晰度。请仅在这样写更易读时使用它。

infix fun Int.power(exp: Int): Int {
    var r = 1
    repeat(exp) { r *= this }
    return r
}

fun main() {
    println(2 power 5)
}

一个流畅的示例

中缀函数可以让断言或构建器读起来几乎像英语句子。

infix fun String.shouldStartWith(prefix: String) =
    this.startsWith(prefix)

fun main() {
    println("kotlin" shouldStartWith "kot")
}

快速检查

请检验您对中缀函数的理解。

回顾

您学会了中缀函数:

  • 使用 infix 标记,并以 a func b 的形式调用。
  • 它必须是成员函数或扩展函数,并且只能有一个既非可变参数又没有默认值的参数。
  • to、until 和 downTo 是内置中缀函数。
  • 仅在确实能提高可读性时使用它。
infix fun Int.add(o: Int) = this + o

fun main() {
    println(4 add 6)
}
免费开始

用 AI 导师学习 Kotlin — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
51
课程
203

常见问题解答

「中缀函数」课时是免费的吗?

是的 — 「中缀函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「中缀函数」这节课中我会学到什么?

可读的函数调用 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「中缀函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 中缀函数
  2. 构建类似 DSL 的 API
  3. tailrec 函数
  4. 何时使用哪个函数
← 返回 Kotlin Academy