Size: a a a

Scala User Group

2020 September 23

Oℕ

Oleg ℕizhnik in Scala User Group
Такого рода рефакторинг бывает регулярно в абсолютно каждой достаточно долго живущей предметной области
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Соответственно, так же как и в случае с сеттерами линзы как минимум помогают создать нормальный API к вашей структуре данных.
Можете вон на сирку посмотреть, где все конструкторы Json скрыты, а в трейте десяток призмоподобных методов
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Если переходить уже к Траверсалам, там ещё больше профитов очевидных
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Рефакторинг неопционального в опциональный, рефакторинг единичного во множественное
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Обходы n вложенных коллекций без форов, не думая сколько там внутри коллекций
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ну для маленькой и редко меняющейся предметной области это и не нужно
источник

P

Pavel in Scala User Group
хорошо, что есть Олег. а то я начал уже писать кривой пример про траверсал. у нас в коде иногда траверсалами заменяется map+filter (или collect)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Pavel
хорошо, что есть Олег. а то я начал уже писать кривой пример про траверсал. у нас в коде иногда траверсалами заменяется map+filter (или collect)
пиши
источник

AD

Apache DOG™ in Scala User Group
Oleg ℕizhnik
Рефакторинг неопционального в опциональный, рефакторинг единичного во множественное
Часто решается методами эпплай
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Apache DOG™
Часто решается методами эпплай
покажешь, как?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
как ты делаешь изменение одного поля методом эпплай
источник

AD

Apache DOG™ in Scala User Group
Oleg ℕizhnik
как ты делаешь изменение одного поля методом эпплай
Ну всмысле, задефолтить значениями из кк
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Apache DOG™
Ну всмысле, задефолтить значениями из кк
я не понял
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Oleg ℕizhnik
я не понял
Типа метод копи, только он его в апплай переименовал
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Λнтон Войцишевский
Типа метод копи, только он его в апплай переименовал
вручную писать метод копирования?
ну это то же самое, что пачка with... руками
источник

P

Pavel in Scala User Group
например, у нас есть стрим ивентов Stream[F, Event], где Event может быть n разных сущностей.
в одном определенном куске кода нас интересуют айди юзеров, которые были забанены модераторами Foo(Reason(Banned), Source.Moderator, userId), где case class Foo(reason: Reason, source: Source, userId: UserId)

в итоге, мы можем написать оптику def moderatorBannedId: Traversal[Event, UserId] = ???, которую заюзаем дальше в коде:

def processor(...): Event => IO[Unit] = e => moderatorBannedId(e).map(dropDatabase)

эту же линзу мы можем переиспользовать для разных нужд
источник

AD

Apache DOG™ in Scala User Group
Ну зачем вы пересказывает доку((
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Apache DOG™
Ну зачем вы пересказывает доку((
из какой это доки
источник

P

Pavel in Scala User Group
естественно, мы могли использовать collect, но его придется менять каждый раз и в каждом месте после каждого изменения Foo
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Oleg ℕizhnik
вручную писать метод копирования?
ну это то же самое, что пачка with... руками
Я прост транслирую песоньковый язык в понятный /shrug
источник