@JZX

Почему постоянно используют функцию copy в реактивных подходах?

Очень часто на данном форуме вижу рекомендации касательно обработки ответов в Rx цепочках, где пишут о том, что необходимо минимизировать изменения state и для этого необходимо использовать kotlin функцию copy.
Сейчас я нахожусь в процессе обучения и сложных приложений еще не писал. Вы можете на каком-нибудь простом примере объяснить какие проблемы могут возникнуть если этого не сделать?

Я не понимаю в чем преимущества использования copy перед прямого обращения к сеттерам и установку значений через них.
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Преимущество в том, что при использовании иммутабельных объектов поток данных остаётся однонаправленным. А если ты будешь мутировать объекты, могут произойти адские спецэффекты. Например.
data class Data(var x : Int)

Observable.just(1, 1, 2, 2)
    .doOnNext { print("I'm $it") }
    .map(::Data)
    . distinctUntilChanged()
    .map{
       it.apply{ x++ }
    }
    .doOnNext { print("Now I'm $it") }
    .subscribe()

Что оно напечатает? Прямо так сходу и не скажешь, тут думать надо. И какого поведения ждал автор такого кода? Непонятно. А это примитивная цепочка, представь, какая жесть может случиться в более сложной ситуации.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы