🚦
Возвращаем или выкидываем
Сейчас будет серия постов, где подытожу опросники выше.
Самый крутой показатель в
этом опроснике – 36% хотели бы возвращать, но выбрасывают.
Чаще всего, это связано с тем, что в их языке принято выбрасывать ошибки, но люди понимают, что "стандарт" не всегда "правильный путь".
Еще, в комментариях к
посту мы с
@highloadzone (спасибо тебе большое за дискуссию) устроили массивное обсуждение на тему ошибок и трейсов, советую почитать.
Там я пришел к следующей мысли:
Реальные "ошибки" – это те, которым мы разрешаем положить наше приложение, и их
надо выкидывать.
А все остальные "ошибки" надо рассматривать скорее как "неуспех" / "неудачу", и их
надо возвращать.
Если следовать такому пути, вы получите лучшее из двух миров:
. Опасные ошибки будут перехватываться где-то на самом верху стэка и иметь право даже положить приложение;
. А вот "неудача", которую просто синтасически удобно выразить в форме структуры Error, всегда
возвращается из функций, потому что нам эту неудачу придется 1 и более раз каким-то образом обработать.
Я понял, что тема крайне большая, поэтому посвящу ее отдельный раздел в
книге ФОП, где расскажу про принципы, заложенные Робом Пайком в дизайн Go, error handling функциональных языков, проблемы hidden control flow и Railway Oriented Programming.