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

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

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

12 ответов

3 просмотра

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

Можешь какой-то пример привести? Какие данные и как ты хочешь обработать. Потому что огромная часть решается простыми операторами, на манер 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 в разных проектах чаще всего, без использования всех остальных особенностей. Даже обработку в фолде не всегда встретишь 🙄

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
Я хочу запустить свой проект в тг. Что-то между пирамидой и майнилкой. Еще подобного ничего не было. Уникальная идея. Нужен именно не бот, а приложение. С ввод, выводом тон...
Павел А.
6
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
How to create an OS in C? what to study?
Linus
18
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Реально в одиночку написать игровой движок на Си?
ㅤ (SVO)
11
Карта сайта