LESSON 09

扩展函数与属性

给已有类型添一把小工具

概念 · 示例 · 练习 · 小测
预计 9 分钟可在 Playground 练习

先用人话理解

扩展函数可以让你用更自然的点号语法,为已有类型提供新操作。它不会真的修改原类,也不能突破原有的访问权限。

本课要点:扩展函数的接收者类型写在函数名前,例如 String.isLikelyPhone。手机号校验示例只适合初步格式判断,不代表号码真实存在。

代码例子

先读注释,再关注每一行如何把数据变成结果。

KOTLIN · 可独立运行
fun String.isLikelyPhone(): Boolean =
    Regex("""1[3-9]\d{9}""").matches(this) // 只做格式检查,不代表号码真实存在

val String.wordCount: Int
    get() = trim().split(Regex("""\s+""")).filter { it.isNotEmpty() }.size

fun main() {
    println("13800138000".isLikelyPhone()) // true
    println("12345".isLikelyPhone())       // false
    val title = "  Kotlin 入门  "
    println(title.wordCount) // 2
}

再看一个用法

KOTLIN · 可独立运行
fun String.hasAtLeastFiveChars(): Boolean = length >= 5

fun main() {
    println("Kotlin".hasAtLeastFiveChars()) // true
    println("猫".hasAtLeastFiveChars())      // false
}

动手改一改

fun String.hasAtLeastFiveChars(): Boolean = length >= 5 println("Kotlin".hasAtLeastFiveChars()) // 改成判断一个你喜欢的单词

去 Kotlin Playground 动手 ↗

提示:Android 专属示例需要 Android Studio 项目和对应依赖;普通 Kotlin 示例可在 Playground 中尝试。

三道小测

先自己选择,再展开答案。答错也没关系,重要的是知道为什么。

1. 扩展函数会直接修改原类源码吗?

查看答案与解析

正确答案:B。抓住题目中的核心概念,重新对照示例理解。

2. 扩展函数通常如何调用?

查看答案与解析

正确答案:A。回到概念和代码示例,再解释一次为什么。

3. 手机号正则能否证明号码真实有效?

查看答案与解析

正确答案:B。抓住题目中的核心概念,重新对照示例理解。

深入阅读

想继续往下挖,可以阅读 Kotlin / Android 官方文档。

打开官方文档 ↗

标记学习进度

进度保存在当前浏览器的 localStorage 中。