aaverin
02/28/2020, 1:43 PMcopy()
constructor of a data class as a kind of builder, essentially calling it multiple times to re-create an object adding some data inside in a pattern like:
data class TrackingEvent(
val eventType: String = "",
val eventFeature: String = "",
val eventVariant: String = ""
)
fun TrackingEvent.click() = copy(eventType = "click")
fun TrackingEvent.onArticleFromStage(stage: String): TrackingEvent {
return copy(
eventFeature = "article_stage",
eventVariant = "click on article from stage $stage"
)
}
TrackingEvent().click().onArticleFromStage("stage")
On one hand I can understand why creating new object would result in GC cleaning up the old one. On the other hand, we have an immutable class and I think I read somewhere about compiler optimizations on this, not creating a new pointer a memory for properties and rather reusing old pointers?
Am I wrong? Should I bring back builder back from Java days instead if I want similar functionality?robin
02/28/2020, 1:50 PMcopy
for a creation might be fine regarding your individual performance requirements. But if you're in a tight loop or need lots of different places where "mutation" happens, then you should probably indeed consider using a dedicated Builder for that.aaverin
02/28/2020, 1:55 PMFleshgrinder
02/28/2020, 1:55 PMaaverin
02/28/2020, 1:56 PMmap
on a listFleshgrinder
02/28/2020, 1:57 PMFleshgrinder
02/28/2020, 1:57 PMaaverin
02/28/2020, 1:58 PMaaverin
02/28/2020, 1:58 PMFleshgrinder
02/28/2020, 1:58 PMFleshgrinder
02/28/2020, 2:00 PMFleshgrinder
02/28/2020, 2:04 PMdata class TrackingEvent(val type: String, val feature: String, val variant: String) {
companion object {
fun articleStage(type: String, stage: String) =
TrackingEvent(type, "article_stage", "click on article from stage $stage")
fun articleStageClick(stage: String) =
articleStage("click", stage)
}
}
fun main() {
TrackingEvent.articleStageClick("stage")
}
Kroppeb
02/28/2020, 5:23 PM