Alex
Вот, а у меня не надо лезть к определению.
Alex
оно сразу там где юзается.
Дима
А зачем? Я лучше напишу функцию один раз
Alex
Потому что эти обработчики редко когда совпадают
Дима
В плане? А если у тебя пришли не те данные, а ты от них с точкой что то вызываешь?
Alex
В смысле не те данные?
Alex
как у тебя могут прийти не те данные?
Дима
Вместо массива - число, а ты от него .map делаешь
Alex
Вместо массива - число, а ты от него .map делаешь
Каким образом оно так получится то? ))
Alex
Может у меня еще объект придет?
Alex
Я все таки когда чайню обработчики я учитываю какие данные могут прийти, верно? если они приходят другие значит у меня так и так программа должна сломаться и я должен это увидеть.
Дима
Так программа не должна ломаться же) Она может обрабатывать пограничные случаи, предоставляя разные варианты выхода из ситуации
Дима
А не fatal error
Alex
Не может программа не ломаться
Alex
У тебя всегда могут быть моменты которые ты не учел
Alex
и если программа вместо того чтобы выдать фатал станет unusable - будет хуже
Дима
Нет, она просто грамотно соберет данные для отладки и всё выведет в нужной форме
Alex
не знаю точного термина. Когда программа сглотнет те данные которые не должна была и обработает как если бы было все ок.
Alex
Нет, она просто грамотно соберет данные для отладки и всё выведет в нужной форме
Объясни. Представь что АПИ ответило тем способом которым ты не ожидал. А тебе надо пользователю страницу отдать. Что ты предлагаешь делать?
Alex
я сваливаюсь в FATAL ERROR потому что апишка не должна так отвечать ни в коем случае.
Alex
соотв пользователь видит "произошла ошибка, попробуйте позже".
Дима
А я спокойно собираю данные, для того, чтобы в ответ отправить важную для разработчиков инфу
Alex
Всегда есть варианты которые сложно учесть.
Alex
разработчики курят логи
Alex
в логах все эксепшены есть.
Дима
А какие логи, если у тебя программа упала?
Alex
ну, я на рельсах
Дима
в логах все эксепшены есть.
В логах у юзера, а по упало
Alex
оу, я про вебсайт говорил все это время ахах.
Alex
Извини.
Alex
Да, на фронте надо собирать данные для какого нибудь багснета.
Alex
Тем не менее представим что фронт сломался. Что ты покажешь пользователю? наверное в конкретном куске напишешь "извините произошла ошибка, попробуйте позже" верно?
Alex
по возможности оставив все остальное приложение работать.
Alex
Я сейчас в голове представляю react приложение если что.
Дима
по возможности оставив все остальное приложение работать.
Что значит по возможности, ты же в error выпадаешь?)
Дима
Имея Maybe я не могу себе представить, как что-то вообще может идти "не так"
Alex
запросто. Что то может пойти не так. Не обработанная ситуация.
Alex
Допустим никто не обрабатывал момент что этот микросервис отвалился, вариантов тысячи.
Дима
До тех пор пока не пришел ответ у меня объект имеет значение Maybe Nothing()
Alex
ты ведь про фронт верно?
Дима
Ну не обязательно
Дима
На ноде это даже лучше работает
Alex
Ну если про бэк то я просто сваливаюсь в FATAL ERROR
Alex
потому что это действительно не обработанная ситуация
Alex
и я должен ее быстро увидеть.
Alex
просто на фронте и бэке подходы кардинально отличаются.
Дима
Ну я скорее про сам подход
Дима
Если я попытаюсь вызывать у объекта Either.Right(serverResponse) какой то ключ, а его там не будет, то у меня будет объект Left('handler123 recived wrong data'), который автоматически безопасно пройдет через любые обработчики и будет корректно документирован любым способом
Дима
Это монада Either, она работает таким образом, что даже Fatal Error — это правильно обработанная ситуация
Nikolay
Alex
Хорошо, у тебя неправильные данные
Alex
что ты делаешь дальше?
Дима
Чем то все это напоминает Rust
Ага, там тоже такое есть
Дима
что ты делаешь дальше?
На выходе из потока обработки получаю значение, в котором хранится место и причина экспешна и любые другие необходимые для анализа данные, после чего их можно отправлять куда угодно как угодно, приложение то работает
Alex
Подожди
Alex
ты так и не ответил что ты показываешь пользователю при неправильных данных
Дима
Что угодно, это не неправильные данные — если ты юзаешь Either это уже означает, что у тебя есть сценарий для реакции на эту ошибку
Alex
Подожди
Alex
у тебя произошла ошибка
Alex
пользователю что показываешь?
Дима
Не ошибка. Функция просто не обработала результат должным образом, почему это будет ошибкой? Пользователю покажу всплывающее окно со словами сервер упал
Alex
И чем это отличается от моего 500 Fatal error?
Дима
Это не принципиально вообще)
Alex
это тоже самое по сути
Alex
как раз таки это и принципиально, я этот момент пытался прояснить.
Alex
у меня точно также приложение сваливается в 500
Дима
И чем это отличается от моего 500 Fatal error?
Тем что приложение не падает, а идёт по абсолютно корректной ветке обработки ошибок и готово к дальнейшей работе когда ситуация с ошибкой изменится
Alex
А разница?
Alex
у меня эксепшн в контроллере произошел, или еще где глубже
Alex
при этом прилоежние то продолжает работать
Alex
Кто сказал что оно полностью падает?
Alexander 🐕
Мать моя женщина Point-free в девапс чате, все в машину!
Дима
Alex
А зачем вообще падать?)
Ты по сути делаешь тоже самое
Alex
зачем все обрабатывать?
Alex
если у тебя есть какая то ошибка которую ты не учел, ты можешь ее исправить только постфактум.
Alex
Точно также у меня если вдруг внешняя апишка заработает - приложение будет нормально работать, а при отсутствии будет 500 отдавать.