Первое, что нужно отметить, это то, что Either
- это костыль, который вам нужен в API только для FP, например, RxJava.До некоторой степени объединение этих операторов, таких как map
и skipUntil
, приводит к хорошему коду, но вы должны изучить большой словарь операторов, и все еще есть случаи, когда вам нужно что-то еще.
Большое преимуществосопрограмм Kotlin заключается в том, что вы можете продолжать использовать простой старый императивный стиль программирования с полной мощью операторов потока управления, включая try-catch
.Поэтому я рекомендую следующую подпись:
class GetTopSongs {
suspend operator fun invoke(limit:Int): List<Song> {
val result = ...
if (someProblem) throw MyException("problem description")
else return result
}
}
Одно из менее очевидных преимуществ возврата к императивному стилю состоит в том, что вы не сталкиваетесь с этими ошибками вывода типа длинной страницы.