跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kotlin run函数
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:Kotlin run函数}} '''Kotlin run函数'''是标准库中的[[作用域函数]]之一,用于在对象上下文中执行代码块并返回结果。它结合了对象访问与表达式计算的特性,适用于初始化、转换或链式调用场景。 == 语法与基本用法 == run函数有两种形式: 1. '''扩展函数形式''':在对象上调用,代码块内通过`this`访问该对象。 2. '''非扩展函数形式''':独立调用,用于创建临时作用域。 === 扩展函数形式 === <syntaxhighlight lang="kotlin"> val result = object.run { // 访问object的属性和方法 this.property // 最后一行作为返回值 computedValue } </syntaxhighlight> '''示例''': <syntaxhighlight lang="kotlin"> data class User(val name: String, var age: Int) fun main() { val user = User("Alice", 25) val bio = user.run { age += 1 // 修改user的属性 "Name: $name, Age: $age" // 返回字符串 } println(bio) // 输出: Name: Alice, Age: 26 } </syntaxhighlight> === 非扩展函数形式 === <syntaxhighlight lang="kotlin"> val result = run { // 独立作用域 val x = 10 x * 2 // 返回值 } </syntaxhighlight> == 与其它作用域函数的对比 == {| class="wikitable" ! 函数 !! 接收者访问 !! 返回值 !! 典型用例 |- | `run` || `this` || 代码块结果 || 对象初始化+计算 |- | `let` || `it` || 代码块结果 || 空检查后操作 |- | `with` || `this` || 代码块结果 || 无安全调用时分组操作 |- | `apply` || `this` || 对象本身 || 对象配置 |- | `also` || `it` || 对象本身 || 附加效果 |} == 实际应用场景 == === 场景1:链式调用中的转换 === <syntaxhighlight lang="kotlin"> val formattedDate = Calendar.getInstance().run { set(2023, Calendar.JANUARY, 1) time.toString() // 返回格式化后的日期字符串 } </syntaxhighlight> === 场景2:安全初始化复杂对象 === <syntaxhighlight lang="kotlin"> val dialog = AlertDialog.Builder(context).run { setTitle("Warning") setMessage("Do you want to proceed?") create() // 返回构建完成的Dialog对象 } </syntaxhighlight> === 场景3:临时作用域变量隔离 === <syntaxhighlight lang="kotlin"> fun calculateDiscount(price: Double) = run { val discountRate = if (price > 100) 0.2 else 0.1 price * (1 - discountRate) } </syntaxhighlight> == 性能考虑 == * run函数会生成临时对象,但在JVM上通常会被内联优化(标记为`inline`)。 * 避免在循环中嵌套多层`run`,可能影响可读性。 == 高级用法:结合Elvis操作符 == <syntaxhighlight lang="kotlin"> val userInput: String? = getUserInput() val processed = userInput?.run { trim().uppercase() } ?: run { // 当userInput为null时执行 "DEFAULT" } </syntaxhighlight> == 可视化流程 == <mermaid> flowchart TD A[调用run函数] --> B{是否为扩展形式?} B -->|是| C[通过this访问对象] B -->|否| D[创建独立作用域] C --> E[执行代码块] D --> E E --> F[返回最后一行结果] </mermaid> == 数学表达(可选) == 对于对象`obj`和代码块`f`,run函数的行为可表示为: <math> \text{run}(obj, f) = f(obj) </math> == 总结 == * `run`适用于需要同时访问对象上下文并返回计算结果的场景。 * 扩展形式常用于对象配置,非扩展形式适合隔离变量作用域。 * 通过返回代码块最后一行实现简洁的函数式风格。 {{Kotlin编程概念}} [[Category:编程语言]] [[Category:Kotlin]] [[Category:Kotlin函数式编程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Kotlin编程概念
(
编辑
)