@vi0

Чем создание нового объекта лучше изменения существующего?

Как вы считаете, чем руководствовался программист который написал так?
Причем этот код может вызываться в цикле.
data class Data1(
	val list1: Collection<Entity1> = listOf(),
	val list2: Collection<Entity2> = listOf()
) {
	fun concat(more: Data1): Data1 {
	      return Data1(
	         this.list1 + more.list1,
	         this.list2 + more.list2
	)
}


Чем это лучше чем такой код:

data class Data1(
    val list1: MutableList<Entity1> = mutableListOf(),
    val list2: MutableList<Entity2> = mutableListOf()
) {
    fun concat(more: Data1): Data1 {
        list1.addAll(more.list1)
        list2.addAll(more.list2)
        return this
    }
}
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Первая функция не имеет побочных эффектов, код на чистых функциях легче сопровождать и распараллеливать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
xez
@xez
TL Junior Roo
listOf - Returns a new read-only list of given elements.
Если коллекция иммутабельная, то и добавить в нее ничего не удасться. Придется создавать новую.
Ответ написан
В дополнение к предыдущим ответам.
Вторая реализация метода имеет право на жизнь, но должна тогда называться append, а не concat.
Обычно методы с названием concat не изменяют данные, которые им даны на входе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы