Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Спасибо за пост, было очень интересно прочитать.
Концепция прикольная, но в целом настроен довольно скептично. Если привнесение функциональных map/flatMap/filter/etc. в контейнеры действительно сильно облегчает работу с ними, то этот следующий уровень абстракции уже кажется перебором. Глобально я вижу две проблемы:
DataSource имеет смысл только внутри проекта, я не буду выносить его в "глобальную общую либу". А внутри проекта иметь такую мощную параметризацию уже не так критично, все равно внутри проекта везде используется один и тот же контейнер, а для тех редких мест, где его надо передать в либу, всегда есть экстеншн методы типа Iterable<T>.asSequence(): Sequence<T>. Да, иметь теоретическую возможность в любой момент перейти с Rx на корутины/что-нибудь еще, приятно, но давайте будем честны, все равно не получится. Все равно завязка на конкретную либу гораздо больше, нежели один вызов DeferredK.async(). Это как с БД — sql как бы стандартизован, но, почему-то, смена базы никогда не бывает простой.Observable<List<Task>>, я хочу Observable<Task>. Концепция последовательности элементов там уже есть внутри. В конце концов, мои таски могут получаться батчами из какого-нибудь микросервиса, и я не хочу ждать все батчи лишь для того, чтобы начать обрабатывать первый таск. А если и на моей стороне обрабатывать лучше батчами, то я хочу написать Observable<Task>.batched(limit, timeout): Observable<List<Task>> (на rx не писал, поэтому с названием мог промазать, но подобное там обязано быть), а не полагаться на сабмитера этих тасков. Получается, что заменить Observable<Task> на Single<Task> просто нельзя. И если для семантики контейнера с отложенным содержимым авторы библиотеки Async<F> написали, то для семантики контейнера с неопределенным числом элементов — нет.
Как писать полиморфические программы c помощью Arrow