☰
KMP学习day1--Kotlin集合高阶函数与参数技巧
2026/10/25 1:55:32 网站建设 项目流程

KMP学习day1–Kotlin集合高阶函数与参数技巧

Kotlin 是 KMP(Kotlin Multiplatform)的地基语言,写好 KMP 共享逻辑的第一步是把 Kotlin 区别于 Java 的日常语法吃透。本文聚焦两个最高频的主题:集合的高阶函数(map/filter)和函数的默认参数与命名参数。它们不炫技,却决定了 Kotlin 代码读起来的味道——简洁、不可变、表达力强。

集合操作:map 与 filter

各自的职责

  • filter:按条件筛选元素,返回只含满足条件元素的新集合。
  • map:对每个元素做映射变换,返回新集合(元素个数不变,类型可以变)。

关键约定:两者都不修改原集合,每次返回新集合——这是函数式风格的「不可变思想」,数据流转清晰可追溯。

基础示例

从分数表筛出及格分,并整体加 5 分( bonus 场景):

valscores=listOf(78,55,92,45)valresult=scores.filter{it>=60}.map{it+5}println(result)// [83, 97],scores 原样不变

链式调用从左到右读:先筛后变,一目了然。对从 ArkTS/TypeScript 转过来的开发者几乎没有学习成本——arr.filter(...).map(...)用法一致。

两个加分细节

先 filter 后 map:先筛掉不满足条件的元素,map阶段的计算量随之减少。顺序反过来功能等价,但会浪费变换运算。

大数据量用asSequence()惰性求值:普通链式调用每一步都会创建一个中间集合;asSequence()让元素逐个走完整条处理链再处理下一个,避免中间集合的内存开销:

valresult=scores.asSequence().filter{it>=60}.map{it+5}.toList()

复杂度上,filter与map各遍历一次,整体 O(n) + O(n) = O(n)。

真实场景

列表页搜索过滤(filter)+ 数据模型转 UI 模型(map),是跨端项目里出现频率最高的组合之一;KMP 中共享层的业务数据也常用这对函数加工后再交给各端 UI。

函数:默认参数与命名参数

默认参数

函数定义时给参数指定默认值,调用时不传就取默认值——Java 里成堆的「参数组合重载」从此消失:

fungreet(name:String,greeting:String="你好",punct:String="!"){println("$greeting,$name$punct")}greet("小明")// 你好, 小明!

命名参数

调用时用参数名 = 值的形式传参,作用有二:可以不按声明顺序传参;可以跳过有默认值的中间参数。

greet("小明",punct="?")// 只改标点,跳过中间的 greetinggreet(punct="!!",name="小明")// 顺序随便换

解决了什么痛点

  • Java:想「只传第 3 个参数」,必须为每个参数组合写一整套重载方法。
  • ArkTS/TypeScript:要么把前面的参数用undefined占位,要么把参数包成 options 对象(如router.pushUrl({ url: "..." }))。
  • Kotlin:命名参数不包对象也能达到 options 对象的效果,还保留了编译期类型检查。

真实场景

KMP 网络层封装里非常典型:HttpClient(timeout = 30, retries = 3),调用方只写自己关心的参数,其余交给默认值——API 既灵活又自文档化。

小结

这两个特性合起来体现了 Kotlin 的设计取向:用声明式的集合链替代手写循环,用默认/命名参数替代重载与参数对象。它们是后续学习协程、Flow、KMP 共享模块 API 设计的 everyday 基本功——先让日常代码变简洁,架构层面的优雅才有着力点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询