在不修改原类代码的情况下,为已有的类添加新方法。

fun String.isNumeric(): Boolean {
    return this.all { it.isDigit() }
}

println("12345".isNumeric()) // 输出: true
println("123a5".isNumeric()) // 输出: false

Android 开发中常用的 “Toast.makeText(…).show()” 经常被封装为 “context.toast(“消息”)”,就是通过扩展函数实现的。

2. 作用域函数 (Scope Functions)

Kotlin 提供了 5 个作用域函数:let, run, with, apply, also。它们的作用是将对象限定在一个代码块内执行操作。

如何区分它们?看两点:上下文对象是谁(this 还是 it,以及返回值是什么(对象本身还是 Lambda 结果)

let —— 最常用,常与 ?. 配合处理非空逻辑

        上下文:it

        返回值:Lambda 结果

val name: String? = "Null猫"
name?.let {
    println(it.length)
}

apply —— 适合对象的初始化配置

        上下文:this(可以省略)

        返回值:对象本身

val person = Person("Null猫", 18).apply {
    age = 19
}
// person 的 age 已经被修改为 19

also —— 适合做一些额外的操作(如打印日志)

        上下文:it

        返回值:对象本身

val numbers = mutableListOf(1, 2, 3).also {
    println("添加元素前的集合: $it")
}

run —— apply let 的结合体

        上下文:this

        返回值:Lambda 结果

val result = person.run {
    age = 20
    "修改后的年龄是 $age"
}

with —— 非扩展函数,用于减少对象名的重复书写

        上下文:this

        返回值:Lambda 结果

val person = Person("Null猫", 18)
with(person) {
    println(name)
    println(age)
}

系列总结

10 篇文章覆盖了 Kotlin 从基础语法到进阶特性的核心内容。掌握这些,无论是写 Android 应用、后端服务(Spring Boot 完美支持 Kotlin),还是写点自动化工具,都已经绰绰有余。

篇目

标题

核心内容

1

Kotlin 是什么?为什么值得学?

语言介绍、环境搭建、Hello World

2

变量与数据类型

val/var、基本类型、字符串模板、类型推断

3

条件与循环

if/when/for/while、区间

4

函数

函数定义、默认参数、命名参数、单表达式函数

5

空安全

可空类型、安全调用、Elvis 运算符、let

6

集合入门

ListSetMap、常用操作

7

面向对象基础

类、属性、构造函数、继承

8

数据类与枚举

data classenum class、密封类

9

Lambda 与高阶函数

Lambda 表达式、map/filter/reduce

10

扩展函数与作用域函数

扩展函数、let/run/apply/also/with