214 похожих чатов

Вопрос к любителям Either и прочих Result. Вы не задалбываетесь эти

штуки разворачивать, если у вас например по нажатию кнопки надо вызвать три разных метода с бэка, и потом с результатами что-то сделать? Может есть какие-то приёмы, чтобы это удобно делать? Только поменьше, чем Arrow)

12 ответов

15 просмотров

Пример нужен? Если вдруг не знаешь, что это

Можешь какой-то пример привести? Какие данные и как ты хочешь обработать. Потому что огромная часть решается простыми операторами, на манер flatMap.

Алексей-Ершов Автор вопроса
Konstantin Dovnar
Можешь какой-то пример привести? Какие данные и к...

Да просто сделать три запроса к бэку и потом все их результаты скомбинировать и вернуть из функции. На обычных корутинах это будет просто три строчки кода. А если каждый из них возвращает Result, это будет больше похоже на Rx код со всеми zip и flatMap. Я поэтому и хочу посмотреть пример кода, который считается идиоматичной или хотя бы просто хорошей реализацией railway подхода на Котлине, и понять какие-нибудь его весомые преимущества.

Алексей Ершов
Да просто сделать три запроса к бэку и потом все и...

>это будет больше похоже на Rx код со всеми zip и flatMap Да, так и будет. Условно. firstRequest() .flatMap(::secondRequest) .flatMap(::thirdRequest) .fold( (err) {}, (res) {}, )

Алексей Ершов
А в чем преимущество?

А в чём недостатки?) Так, в случае ошибки где-то по цепочке ты сразу её и получишь, не проходя дальше и всегда будешь обрабатывать ошибки и успешные результаты в фолде. Аналогично с каким-нибудь зипом и другими операторами, с поправкой на их логику.

Алексей-Ершов Автор вопроса
Konstantin Dovnar
А в чём недостатки?) Так, в случае ошибки где-то ...

Я не вижу отличий от заворачивания этого всего в try-catch без всяких result.

Алексей Ершов
Я не вижу отличий от заворачивания этого всего в t...

Очевидно же, что отличие в стиле дальнейшей работы? В случае с выбрасыванием исключений — тебе надо где-то на местах вызовов обрабатывать, в случае с котлином это ещё и пропустить легко. А с Either у тебя уже в месте вызова контракт подразумевает обработку ошибки, т.к. ожидает две функции при развертывании на оба случае. Да и цепочки действий в таком случае, как по мне, выглядят приятнее и проще. Но там уже вкусовщина, разумеется. Просто не понимаю проблемы:)

Алексей-Ершов Автор вопроса
Konstantin Dovnar
Очевидно же, что отличие в стиле дальнейшей работы...

Вот, надо обозначить проблему. Был обычный Котлин: функции возвращают значения и кидают исключения. Кто-то пришел и говорит, есть проблема! И чтобы её решить, функции теперь возвращают Result и не кидают исключения, а весь код вы должны писать через fold и flatmap. Вопрос: чем стало лучше, какая проблема решена?

Алексей Ершов
Вот, надо обозначить проблему. Был обычный Котлин:...

Мне кажется ты намешал. Это два параллельных подхода, которые существовали задолго до появления котлина. И никакого «было так — плохо, но мы принесли result — стало хорошо» нет. Просто далеко не всем нравится кидать исключения и отлавливать их на месте вызова. Особенно когда сам котлин отодвинулся чуть дальше от этого подхода, отказавшись от Checked Exceptions. И существует альтернатива в лице монад и цепочных вызовов. Дальше просто исходя из своего вкуса действуем.

Алексей-Ершов Автор вопроса
Konstantin Dovnar
Мне кажется ты намешал. Это два параллельных подх...

Исторически согласен, я говорил с точки зрения человека, который использовал обычный котлин, и увидел эти рельсы. То есть основной профит - это внёсение ошибки в сигнатуру функции? То есть, снова checked exception?

Алексей Ершов
Исторически согласен, я говорил с точки зрения чел...

Я бы сказал, что основной профит в "традиционной" разработке как-раз обычная возможность получить один из двух вариантов из функции. Именно за таким делам встречал Either в разных проектах чаще всего, без использования всех остальных особенностей. Даже обработку в фолде не всегда встретишь 🙄

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта