Kotlin Multiplatform day05
// // 第 5 课Lambda、高阶函数、集合链式、接口 // fun main() { // 一、Lambda把“一段代码”当作值 // 普通变量存的是数据(数字/字符串)lambda 让变量能存“一段可执行的逻辑”。 // 语法{ 参数 - 逻辑 } val square { x: Int - x * x } // 一个“求平方”的逻辑存进变量 println(5 的平方 ${square(5)}) // 像调用函数一样用它 // 多个参数 val plus { a: Int, b: Int - a b } println(3 4 ${plus(3, 4)}) // 二、高阶函数参数是“函数”的函数 // calc 的第三个参数 op 本身是一段逻辑调用时传不同的 lambda 就有不同效果 println(用加法${calc(10, 5, plus)}) println(用减法${calc(10, 5) { a, b - a - b }}) // 直接现写一个 lambda // repeatAction把“要做的事”作为参数传进去重复执行 repeatAction(3) { println( 滴~ 第 $it 次) } // it 是第几次 // 三、集合链式操作进阶 // 定义一批学生数据用第4课学的 data class val students listOf( Student(小明, 85, 一班), Student(小红, 92, 二班), Student(小刚, 58, 一班), Student(小美, 76, 二班), Student(小强, 88, 一班), ) // 1) 链式筛及格 - 按分数从高到低排 - 只取名字 val topNames students .filter { it.score 60 } // 及格 .sortedByDescending { it.score } // 分数降序 .map { it.name } // 变成名字列表 println(及格学生(按分数降序)$topNames) // 2) groupBy按班级分组得到 Map班级, List学生 val byClass students.groupBy { it.clazz } for ((clazz, list) in byClass) { val names list.map { it.name } println($clazz 有$names) } // 3) 常用聚合 println(平均分 ${students.map { it.score }.average()}) println(分数最高的是 ${students.maxByOrNull { it.score }?.name}) println(有没有不及格的 ${students.any { it.score 60 }}) println(是不是全都及格 ${students.all { it.score 60 }}) // 四、接口 interface定义“能力/契约” // 接口只规定“必须有哪些方法”具体怎么做由实现类决定。 // 这里让不同的“可以发声的东西”都实现 Sound 接口。 val things: ListSound listOf(Bell(), Phone()) for (t in things) { t.play() // 调用时不用管它具体是铃还是手机只要它能 play } } // 高阶函数定义 // op 的类型是 (Int, Int) - Int表示“接收两个Int、返回一个Int的函数” fun calc(a: Int, b: Int, op: (Int, Int) - Int): Int { return op(a, b) // 执行传进来的那段逻辑 } // action 的类型是 (Int) - Unit接收一个Int、不返回东西(Unit相当于void) fun repeatAction(times: Int, action: (Int) - Unit) { for (i in 1..times) { action(i) // 把当前次数传给那段逻辑 } } // data class第4课学过 data class Student(val name: String, val score: Int, val clazz: String) // 接口和它的实现 // 接口规定“凡是 Sound都必须能 play()”但不写具体实现 interface Sound { fun play() } // 两个不同的类各自实现 Sound 的 play() class Bell : Sound { override fun play() println(铃声叮铃铃~) } class Phone : Sound { override fun play() println(手机震动 来电铃声) }全部跑通 5 的平方 25用加法15 用减法5及格学生(按分数降序)[小红, 小强, 小明, 小美]一班 有[小明, 小刚, 小强]二班 有[小红, 小美]平均分 79.8 分数最高的是 小红有没有不及格的 true 是不是全都及格 false铃声叮铃铃~ 手机震动 来电铃声第 5 课知识点复盘一、Lambda把一段代码当成值普通变量存数字/字符串lambda 让你把一段逻辑存进变量、当参数传递。val square { x: Int - x * x } // { 参数 - 逻辑 }square(5) // 得到 25这是第 3 课里filter { it 60 }那个{ }的真面目——它就是个 lambda。二、高阶函数参数是函数的函数函数的参数也可以是另一段逻辑这让代码超级灵活fun calc(a: Int, b: Int, op: (Int, Int) - Int): Int op(a, b)calc(10, 5) { a, b - a - b } // 传不同 lambda 就有不同行为(Int, Int) - Int读作接收两个 Int、返回一个 Int 的函数类型小技巧如果 lambda 是最后一个参数可以把它挪到括号外面写叫尾随 lambda就像calc(10, 5) { ... }。你之前见的filter { }、for之外的很多写法都靠它。三、集合链式操作 —— 真实开发天天用 ✨把多个操作像流水线一样接起来students.filter { it.score 60 } // 筛.sortedByDescending { it.score } // 排.map { it.name } // 变换常用武器一览方法作用filter { }筛选map { }变换每个元素sortedBy / sortedByDescending排序groupBy { }分组 →MapmaxByOrNull { }找最大的那个元素any { }/all { }有没有任意一个 / 是不是全部满足sum / average / count求和/平均/计数四、接口interface—— 定义能力契约接口只规定必须有哪些方法不管具体怎么实现interface Sound { fun play() } // 契约凡是 Sound 都能 playclass Bell : Sound { override fun play() ... }class Phone : Sound { override fun play() ... }好处使用方只关心它能play()不关心它到底是铃还是手机。这叫面向接口编程是写大型可维护程序、以及 KMP 里expect/actual机制的思想基础。 接口 vs 继承继承是是一种Dog 是一种 Animal接口是能做某事Bell 能发声。一个类只能继承一个父类但可以实现多个接口。小练习 ✍️用今天学的链式操作试试可以让我帮你跑用上面的students列表找出**一班里分数最高的学生的名字**。 提示先filter出一班再maxByOrNull { it.score }最后取?.name。

相关新闻

如何组织Python代码让团队协作更高效

如何组织Python代码让团队协作更高效

别让你的Python代码变成“只有自己能看懂”的烂摊子 当团队从两三个人扩张到十几人甚至上百人,代码库从几百行膨胀到几十万行,最先崩溃的往往不是系统性能,而是协作效率。你见过这样的场景吗?一个新成员花了两周才搞清楚项目结构…

2026/7/9 2:14:45阅读更多 →
Codex接入DeepSeek:AI编程助手模型切换与配置实战指南

Codex接入DeepSeek:AI编程助手模型切换与配置实战指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你最近在关注 AI 编程助手,可能会发现一个现象:很多开发者不再满足于单一的云端工具,而是开始…

2026/7/9 2:09:45阅读更多 →
PyTorch 2.0+ 模型文件 .pt/.pth/.pkl 深度解析:3种格式的存储机制与实战选择

PyTorch 2.0+ 模型文件 .pt/.pth/.pkl 深度解析:3种格式的存储机制与实战选择

PyTorch 2.0 模型文件存储机制全景解析:从二进制序列化到生产部署的最佳实践 当我们在PyTorch中完成模型训练后,第一个面临的关键决策就是如何保存这个来之不易的智力成果。 .pt 、 .pth 和 .pkl 这三种看似简单的文件后缀背后,隐藏着P…

2026/7/9 2:09:45阅读更多 →
为什么顶尖创意工作室悄悄弃用DALL-E?——从品牌一致性、迭代效率到版权链溯源,一场被低估的生产力革命正在发生

为什么顶尖创意工作室悄悄弃用DALL-E?——从品牌一致性、迭代效率到版权链溯源,一场被低估的生产力革命正在发生

更多请点击: https://codechina.net 第一章:一场静默的工具迁移:创意工作室为何集体转向Midjourney 当Adobe Firefly在2023年夏季发布时,多数设计团队曾期待它成为生成式设计的新支点。然而三个月后,行业调研显示——…

2026/7/9 6:35:09阅读更多 →
Deb to IPA:终极免费工具,3分钟将Linux应用转换为iOS IPA文件

Deb to IPA:终极免费工具,3分钟将Linux应用转换为iOS IPA文件

Deb to IPA:终极免费工具,3分钟将Linux应用转换为iOS IPA文件 【免费下载链接】deb-to-ipa ▶️ Convert an application from a deb to an IPA with a GitHub workflow. 项目地址: https://gitcode.com/gh_mirrors/de/deb-to-ipa 你是否曾梦想过…

2026/7/9 6:35:09阅读更多 →
电竞比赛主板如何兼顾多显卡扩展与性价比?2026年四大品牌选购风向标

电竞比赛主板如何兼顾多显卡扩展与性价比?2026年四大品牌选购风向标

2026年的电竞主板市场,正在经历一场从“参数竞赛”到“生态竞争”的深刻转变。据行业研究机构数据,全球游戏级主板市场规模预计达127.5亿美元,年复合增长率保持在8.30%。然而,受内存与硬盘价格持续攀升影响,2026年4月中…

2026/7/9 6:35:09阅读更多 →
${PROJECT_NAME} 技术文档

${PROJECT_NAME} 技术文档

${PROJECT_NAME} 技术文档 【免费下载链接】idea-markdown Markdown language support for IntelliJ IDEA (abandonned). 项目地址: https://gitcode.com/gh_mirrors/id/idea-markdown 概述 ${PROJECT_DESCRIPTION} 安装指南 环境要求安装步骤配置说明 API参考 类和…

2026/7/9 6:35:09阅读更多 →
村长团队教你用Blender+Sollumz制作GTA5全域可互动游泳水源超细实操教程

村长团队教你用Blender+Sollumz制作GTA5全域可互动游泳水源超细实操教程

BlenderSollumz制作GTA5全域可互动游泳水源完整超细实操教程一、前期全部必备软件工具提前装好(一步都不能漏)1. 提前下载安装稳定版Blender软件,优先选择3.3至4.0之间的版本,这个区间版本适配所有GTA5模组水源制作插件&#xff0…

2026/7/9 6:35:09阅读更多 →
WarcraftHelper:魔兽争霸III现代优化插件完整指南

WarcraftHelper:魔兽争霸III现代优化插件完整指南

WarcraftHelper:魔兽争霸III现代优化插件完整指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸III在现代电脑上的兼…

2026/7/9 6:30:09阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/9 5:56:19阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/8 7:00:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/9 2:47:07阅读更多 →
Three.js 着色器光效教程

Three.js 着色器光效教程

着色器光效 Shader Light ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 ShaderMaterial 自…

2026/7/9 0:04:37阅读更多 →
如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南 【免费下载链接】casemove A dedicated desktop app that enables you to move items in and out of storage units in CS2. 项目地址: https://gitcode.com/gh_mirrors/ca/casemove 还在为CS2存储单…

2026/7/9 0:04:37阅读更多 →
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M…

2026/7/9 0:04:37阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/8 6:59:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/8 13:42:39阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/8 13:42:39阅读更多 →