Kotlin 我可以将生成器模式与lambda表达式组合起来吗?

Kotlin 我可以将生成器模式与lambda表达式组合起来吗?,kotlin,lambda,functional-programming,builder-pattern,Kotlin,Lambda,Functional Programming,Builder Pattern,以下lambda表达式对在lambda之外创建的类进行操作。 我认为这个笨拙。有更好的方法吗 class Builder { var searchTerms = listOf<String>() fun build(whatever: String): Builder { searchTerms = searchTerms + whatever return this } } fun main() { val b =

以下lambda表达式对在lambda之外创建的类进行操作。 我认为这个笨拙。有更好的方法吗

class Builder {
    var searchTerms = listOf<String>()
    fun build(whatever: String): Builder {
        searchTerms = searchTerms +  whatever
        return this
    }
}

fun main() {
   val b = Builder()
   val toSearch = listOf<String>("Anna", "Berta", "Carla")
   toSearch.forEach{ e-> b.build(e)}
}
类生成器{
var searchTerms=listOf()
有趣的构建(无论什么:字符串):生成器{
searchTerms=searchTerms+任何内容
还这个
}
}
主要内容(){
val b=Builder()
val toSearch=列表(“安娜”、“贝尔塔”、“卡拉”)
toSearch.forEach{e->b.build(e)}
}

< /代码> 不完全确定你认为什么笨拙,但是如果你必须为临时变量创建一个清晰的行,你可以考虑这个清洁器:

fun main() {
    val toSearch = listOf<String>("Anna", "Berta", "Carla")
    val b = toSearch.fold(Builder()) { builder, e -> builder.build(e) }
}
fun main(){
val toSearch=列表(“安娜”、“贝尔塔”、“卡拉”)
val b=toSearch.fold(Builder()){Builder,e->Builder.build(e)}
}

< /代码> 不完全确定你认为什么笨拙,但是如果你必须为临时变量创建一个清晰的行,你可以考虑这个清洁器:

fun main() {
    val toSearch = listOf<String>("Anna", "Berta", "Carla")
    val b = toSearch.fold(Builder()) { builder, e -> builder.build(e) }
}
fun main(){
val toSearch=列表(“安娜”、“贝尔塔”、“卡拉”)
val b=toSearch.fold(Builder()){Builder,e->Builder.build(e)}
}

值得一提的是,在Kotlin中,构建器不太常用,在Kotlin中,使构造函数参数可选并提供默认值的能力意味着单个构造函数通常可以完成整个构建器的工作。(类似地,“fluent”风格的方法每次返回
this
,当您有函数构造和
with
函数时,并不需要太多。)对于在一个对象上设置一组参数的构建器来说,这是正确的。我不确定增长的对象(如上图)是否符合构建器模式。如果上面的示例是一个不可变的类,它返回一个包含附加数据的副本,那么它将与coroutinectext类似。不知道这个模式是否有名称。可能值得指出的是,构建器在Kotlin中不太常用,因为Kotlin具有使构造函数参数可选并提供默认值的能力,这意味着单个构造函数通常可以完成整个构建器的工作。(类似地,“fluent”风格的方法每次返回
this
,当您有函数构造和
with
函数时,并不需要太多。)对于在一个对象上设置一组参数的构建器来说,这是正确的。我不确定增长的对象(如上图)是否符合构建器模式。如果上面的示例是一个不可变的类,它返回一个包含附加数据的副本,那么它将与coroutinectext类似。不知道这个图案有没有名字。