Как стать автором
Обновить

Комментарии 6

На первый взгляд, не вижу разницы с Try. Вам не удается представить ошибку HTTP протокола в виде Exception? А что мешает? Вы же все равно расширяете типы отказов классами.

Ну т.е. в самом примитивном варианте, чисто в качестве иллюстрации:

XResult.err(new RuntimeException("HTTP error 401"))

И что изменилось?

На первый взгляд, не вижу разницы с Try

Try не обрабатывает null значения, Optional не умеет перехватывать исключения, XResult делает и то, и другое

Нууу, я бы так сказал: на Optional, тот что из JRE, вообще плевать. Есть нормальные реализации, которые работают как надо (open source). То что Optional не умеет исключения - это наоборот, логично, и не должен. В общем, я эти соображения понял, но скажем для меня они не имеют особого смысла.

Трудно установить место возниковения null при использовании нескольких операций `map()` и непонятно какой фильтр сработал при использовании нескольких операций `filter()`. Иными словами, Optional не сохраняет контекста при возникновении проблемы. Ну да ладно, не будем слишком придираться.

Вообще в теории map именно тем и отличается от for-each, что у него нет императивного контекста.

Мне интересно, а в случае с опциональными полями класса предлагается тоже писать XResult? Меня в принципе смущает, что оригинальный Result не несёт в дженерике тип ошибки(как, например, IO из ZIO), чтобы по сигнатуре можно было понять чего ожидать, а тут ещё и скрывается был ли null результатом выполнения чистой функции или сайд эффекта, т.е. для меня метод возвращающий Result<Option<T>> означает, что метод с сайд эффектом может вернуть значение или отсутствие значения, а ещё ошибку, итого 3 исхода, все из которых видно по сигнатуре, а XResult это скрывает, по итогу на каждый такой метод нужно писать проверку на null, но длиннее т.к. == null заменяется на isInstanceOf NPE и потом ещё и в половине случаев обрабатывать это не как ошибку, а как ожидаемое отсутствие значения.

Мне интересно, а в случае с опциональными полями класса предлагается тоже писать XResult?

Думаю нет. Классики рекомендуют использовать Optional в основном как возвращаемое значение функции, то же самое будет справедливо для XResult.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации