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

Подскажите, как тут правильней поступить?

25 ответов

14 просмотров

Не использовать void в Either. Или взять Option или Nullable aka T?

Смотря что надо, судя по всему вы хотите чтобы функция возвращала класс AppError при ошибке и какую-то функцию если нет ошибки? Если нет и вы просто хотите ловить ошибку на Left, то на Right передайте пустую анонимную функцию (){} - подойдет под сигнатуру void

null

Voffka- Автор вопроса
Kirill Bubochkin
null

Да, вот на null даже линтер не ругается 👍🏻 Хотя все это выглядит немного странновато

не использовать either

Voffka- Автор вопроса
Daniil Koliasnikov
не использовать either

Option? А как с ним сделать? чет я не понял

Voffka
Option? А как с ним сделать? чет я не понял

А для чего вы там Either используете, чтобы что?

Voffka- Автор вопроса
Voffka
Option? А как с ним сделать? чет я не понял

Option<AppError> initAll(){.... return Some(AppError(...))}

Dmitrii Cheremisov
и, что вам Either даёт?

Обычно используют для отделения например блока от логики try - catch. В Either левый аргумент делают Failure класс от которого затем наследуется ServerFailure или FireStoreFaulure и у каждого класса свой парсинг Exceptionа По большей степени это чисто архитектурное решение для разделения слоев. Но в чем то и доп куча кода

Dmitrii Cheremisov
и, что вам Either даёт?

Это было придумано, чтоб не возвращать null в случае ошибки

В чем проблема throw сделать?

свифка (макс)
В чем проблема throw сделать?

И дальше что? throw это для программиста сообщение, а юзеру программы ты что покажешь? или молча упадешь?

свифка (макс)
try catch???

А дальше? Думай дальше...

Voffka- Автор вопроса
свифка (макс)
try catch???

У меня предполагается, что try-catch сработает внутри блока initialization и вернется Left(AppError(..)) А если ошибок не будет, то вернется void - ничего не вернется

Voffka
У меня предполагается, что try-catch сработает вну...

Ну если метод выполнится, то ниче не вернет, если что то пойдет не так - кинет исключение. А ты его словишь сверх через блок try catch и делай с ним че хочешь. Either по сути никакую проблему не решает, так что я лично к этому субъективно отношусь

нет, Either это более правильный вариант, чем try catch. Через try catch — дерьмовый вариант, не нужно так делать.

Dmitrii Cheremisov
нет, Either это более правильный вариант, чем try ...

Кек, а как вы собираетесь первоначально ловить ошибку и передавать ее в either/option/result без try catch?) А что мешает вам и дальше использовать try catch и дальше, если вы его будете в любом случае использовать?)

MiT
Кек, а как вы собираетесь первоначально ловить оши...

Tсли вы используете библиотеку, либо то, что может генерить исключения, будете ловить исключения через try-catch — у вас просто не будет другого выхода. В отличие от Java, все исключения в Dart являются непроверяемыми исключениями. Методы не объявляют, какие исключения они могут выбросить, и от разработчика не требуется перехватывать исключения. Если исключение не поймано, то изолят, вызвавший исключение, приостанавливается, и, как правило, завершается работа приложения (красный экран смерти 😃). Уже этого одного было бы достаточно, чтобы не использовать исключения для прерывания потока управления в приложении, что нарушает ожидаемый ход выполнения (Control Flow Interruption). Не надо множить возможность возникновения ошибок их и так будет предостаточно. Я не понимаю зачем это делать преднамерянно. Ладно если разработчик опытный, ну, про дурака уже как-то писал.

MiT
Кек, а как вы собираетесь первоначально ловить оши...

Накину дальше, а как вы при использовании either/result собираетесь проверять какая и откуда у вас ошибка? А где stack trace?

MiT
Накину дальше, а как вы при использовании either/r...

вы наверное не внимательно читали, тут про преднамерянный throw, который используют как Control Flow Interruption

Dmitrii Cheremisov
вы наверное не внимательно читали, тут про преднам...

Я все правильно прочитал и понял. И тот подход с throw это нормальная практика. Вы для начала посмотрите исходники dart sdk и flutter, и ознокомтесь как в dart работают с Control Flow Interruption, вместо того чтобы тянуть знания из других ЯП и натягивать их на dart...

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

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

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
я имею в виду официально интегрированный в телегу? в том плане что не сливает переписку с пользователем?
Andrey
9
Кто-нибудь решал проблему с автоматическим скроллингом к выбранной ячейке в TDBGrid в Lazarus? Проблема в том, что есть допустим 3 столбца, третий столбец виден наполовину, вк...
Дмитрий Логинов
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Чорт! Чорт! Чорт! Стала ставить через GetIt (написано же, что ручками не рекомендуется) Сломалось на дублировании моей TSkLabel. Чтож мне ее по всем проектам переименовывать в...
Катерина Свиридова
7
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
Карта сайта