CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kotlin 语言入门/课时/函数与 Lambda
RawBlame
课时目录12 节

Kotlin 语言入门

  1. 01Kotlin 是什么
  2. 02基础语法与类型
  3. 03控制流
  4. 04函数与 Lambda
  5. 05集合 API
  6. 06类与 OOP
  7. 07空安全
  8. 08协程
  9. 09JVM 与 Spring
  10. 10Android 与 Compose
  11. 11Ktor 服务端
  12. 12综合练习

函数与 Lambda

扩展函数、高阶函数、尾递归。

35 分钟

函数与 Lambda

Kotlin 中函数是一等公民:默认参数、命名参数、扩展函数、高阶函数与尾递归都是语言内置特性,比 Java 8 Lambda 更自然。

学习目标

  • 掌握函数声明、默认参数与命名参数
  • 理解 Lambda、高阶函数与函数类型
  • 会使用扩展函数与尾递归 tailrec

函数基础

fun greet(name: String, prefix: String = "Hello"): String {
    return "$prefix, $name!"
}

fun createLesson(slug: String, title: String, order: Int = 0): String {
    return "[$order] $slug: $title"
}

fun main() {
    println(greet("CodeRoadMap"))
    println(greet("Kotlin", prefix = "Hi"))

    println(createLesson("kt-intro", "Kotlin 是什么"))
    println(createLesson("kt-syntax", "基础语法", order = 2))
}

默认参数减少重载;命名参数提高可读性,可跳过中间参数。

Lambda 与高阶函数

fun filterLessons(
    slugs: List<String>,
    predicate: (String) -> Boolean
): List<String> = slugs.filter(predicate)

fun main() {
    val slugs = listOf("kt-intro", "kt-syntax", "kt-control", "java-intro")

    // Lambda 写法
    val kotlinOnly = filterLessons(slugs) { it.startsWith("kt-") }
    println(kotlinOnly)

    // 函数引用
    val longSlugs = slugs.filter(String::isNotEmpty)
        .filter { it.length > 8 }
    println(longSlugs)

    // 高阶函数:map / fold
    val titles = slugs.map { it.replace("-", " ").replaceFirstChar { c -> c.uppercase() } }
    val totalLen = slugs.fold(0) { acc, s -> acc + s.length }
    println(titles)
    println("总字符数: $totalLen")
}

(String) -> Boolean 是函数类型;it 是单参数 Lambda 的隐式名。

扩展函数

fun String.slugToTitle(): String =
    split("-").joinToString(" ") { word ->
        word.replaceFirstChar { it.uppercase() }
    }

fun List<String>.kotlinLessons(): List<String> =
    filter { it.startsWith("kt-") }

fun main() {
    val slug = "kotlin-essentials"
    println(slug.slugToTitle())

    val all = listOf("kt-intro", "java-intro", "kt-syntax")
    println(all.kotlinLessons())
}

扩展函数不修改原类,编译为静态方法,JVM 上与 Java 工具类等价。

尾递归

tailrec fun factorial(n: Int, acc: Int = 1): Int {
    return if (n <= 1) acc else factorial(n - 1, acc * n)
}

fun main() {
    println(factorial(5))   // 120
}

tailrec 要求递归调用是函数最后一行,编译器优化为循环,避免栈溢出。

与 Java 对照

Kotlin
Java
fun f(x: Int = 0)方法重载
{ it -> it.length }s -> s.length()
String::lengthString::length
fun String.ext()静态工具类 StringUtils.ext(s)
tailrec fun f()手动改循环

练习

  • 写扩展函数 Int.isEven() 返回 Boolean
  • 用 fold 计算 List 中字符串总长度
  • 用 tailrec 实现斐波那契第 n 项

小结

默认参数、Lambda、扩展函数是 Kotlin 表达力的核心。 下一课集合 API。见 kotlin-essentials。

加载本节练习…
← 上一课控制流下一课 →集合 API