data class Animal(dog: String, numberOfLegs: Int)
and Animal dog = Animal.builder()
.setName("dog")
.setNumberOfLegs(4)
.build();
are very different. In this case the builder pattern is more powerful as it lets you pass around builders that haven't been "built" yet. Kind of like currying.