2026/1/22 16:13:10
网站建设
项目流程
网站微商城的建设运营实践和思考,做音乐网站的目的和意义,wordpress菜单栏不显示不出来,深圳盐田住房和建设局网站太棒了#xff0c;直接通过代码练习来理解是掌握 Kotlin 和 Compose 的最快方式。这里有 4 个循序渐进的练习#xff0c;从纯 Kotlin 语法到底层原理#xff0c;再到 Compose 实战。练习 1#xff1a;基础热身#xff08;理解语法糖#xff09;在这个练习中#xff0c;我…太棒了直接通过代码练习来理解是掌握 Kotlin 和 Compose 的最快方式。这里有 4 个循序渐进的练习从纯 Kotlin 语法到底层原理再到 Compose 实战。练习 1基础热身理解语法糖在这个练习中我们将定义一个高阶函数接收函数作为参数的函数然后用“尾随 Lambda”的方式调用它。目标理解为什么 ) 后面可以直接接 {}。code Kotlindownloadcontent_copyexpand_less// 1. 定义一个高阶函数 // 最后一个参数 operation 是一个函数接收两个 Int返回一个 Int fun mathOperation(a: Int, b: Int, operation: (Int, Int) - Int): Int { return operation(a, b) } fun main() { // 写法 A传统写法Lambda 在括号内 // 这种写法很丑像 Java 的匿名内部类 val res1 mathOperation(10, 5, { x, y - x y }) // 写法 B尾随 Lambda推荐写法 // 因为 operation 是最后一个参数所以大括号移到外面 val res2 mathOperation(10, 5) { x, y - x - y } println(加法: $res1) println(减法: $res2) } 你的任务调用 mathOperation利用尾随 Lambda 实现一个“乘法”逻辑。练习 2模拟 Compose 的 onClick无参 LambdaCompose 中的 Button(onClick {}) 是最常见的场景。我们来模拟一个这样的函数。目标理解 () - Unit 类型。code Kotlindownloadcontent_copyexpand_less// 模拟一个简单的组件函数 fun MySimpleButton(text: String, onClick: () - Unit) { println(绘制按钮: $text) println(模拟用户点击...) // 执行传入的 lambda onClick() } fun main() { // 练习调用这个按钮 // 场景点击后打印日志 MySimpleButton(登录) { println(正在连接服务器...) } // 场景点击后计算数据 MySimpleButton(计算) { val result 1 1 println(结果是 $result) } } 你的任务定义一个 MySimpleButton(退出)并在 Lambda 中写两行代码例如打印 清理缓存 和 关闭应用。练习 3模拟 Compose 的嵌套布局Column/Row 原理这是 Compose 最核心的魔法。为什么我们可以像写 HTML 一样嵌套结构因为 Lambda 里面可以调用其他函数。目标理解嵌套结构。code Kotlindownloadcontent_copyexpand_less// 定义一个布局函数content 是要在里面执行的内容 fun MyColumn(content: () - Unit) { println(---- Column 开始 ----) content() // 执行大括号里的代码 println(---- Column 结束 ----) } // 定义一个子组件 fun MyText(text: String) { println(\t[文本组件]: $text) } fun main() { // 这就是 Compose 布局的雏形 MyColumn { MyText(标题你好) MyText(副标题世界) // 甚至可以嵌套只要函数允许 MyColumn { MyText(内部的文本) } } } 你的任务在 main 函数中创建一个 MyColumn里面包含 3 个 MyText模拟一个简单的文章列表结构。练习 4进阶 —— 带接收者的 Lambda (Lambda with Receiver)这是 Compose 中 Column { this.align(...) } 的原理稍微难一点但非常重要。如果 Lambda 的类型是 T.() - Unit那么在 {} 里面你就可以直接使用 T 的方法类似于 this。code Kotlindownloadcontent_copyexpand_lessclass TextScope { var color: String Black var fontSize: Int 14 fun bold() { println(设置字体为粗体) } } // content 的类型是 TextScope.() - Unit // 意味着在 Lambda 内部我们拥有 TextScope 的上下文 fun StyledText(content: TextScope.() - Unit) { val scope TextScope() scope.content() // 让 scope 去执行这个 lambda println(最终样式 - 颜色: ${scope.color}, 大小: ${scope.fontSize}) } fun main() { // 注意在这里面可以直接访问 color, fontSize, bold() // 而不需要写 scope.color StyledText { color Red // 等同于 this.color Red fontSize 20 bold() } } 你的任务修改 main 中的调用将 StyledText 的颜色设为 Blue并调用 bold()。总结练习直接用于 Compose如果你手头有 Android Studio直接把这段代码贴到 Compose 的 setContent 里code Kotlindownloadcontent_copyexpand_less// 这是一个标准的 Compose 写法 // 1. Column 使用了尾随 Lambda // 2. Button 使用了尾随 Lambda (onClick) // 3. Text 是普通函数调用 Column { // 尾随 Lambda 开始 Text(欢迎来到 Compose) Button(onClick { /* Lambda 内部 */ println(点击了按钮) }) { // Button 还有一个尾随 Lambda 用于由内容(content) Text(点击我) } } // 尾随 Lambda 结束