Kotlin为何未提供循环表达式?
Kotlin循环生成集合的常见疑问
为啥repeat不能直接生成列表?
repeat的本质是执行N次无返回的操作——它要求传入的lambda返回Unit,所以你写的repeat(5) { UUID.randomUUID() }确实会生成5个UUID,但生成后直接被丢弃,不会把这些值收集成列表返回,自然没法赋值给uuids。
有没有你没注意到的替代写法?
除了你用到的(1..5).map,还有两种更顺手的写法:
- 使用
buildList(Kotlin 1.3及以上版本支持),它专门用来构建列表,内部可以自由编写循环逻辑:val uuids = buildList { repeat(5) { add(UUID.randomUUID()) } } - 或者用
generateSequence生成无限UUID序列,再截取前5个转成列表:val uuids = generateSequence { UUID.randomUUID() }.take(5).toList()
Kotlin为啥不设计"循环表达式"?
这是语言设计理念的选择:
- Kotlin主张能用现有API解决的问题,就不新增冗余语法。
range.map、buildList这类API已经能完美覆盖"循环生成集合"的需求,而且语义更清晰——比如(1..5).map一看就懂是遍历范围生成新列表,buildList则明确是用于构建列表的工具。 - 判断是否为函数式语言,核心看是否支持函数作为一等公民、不可变数据、纯函数等特性,Kotlin完全满足这些要求。有没有专门的循环表达式,根本不是函数式语言的判定标准。Kotlin是多范式语言,没必要为了凑语法点强行添加这类特性。
以后会新增这类特性吗?
目前Kotlin官方没有添加专门"循环表达式"的计划。现有API已经足够灵活且可读性强,新增语法反而会增加语言复杂度,违背Kotlin"简洁实用"的设计原则。
内容的提问来源于stack exchange,提问作者Kurt
相关产品推荐
相关产品推荐

