Обработка ошибок. Исключения vs Монады

Чуваки из интернета говорят, что исключения - зло, а монады - лучше и вообще будущее. Я потратил 5 часов на то, чтобы разобраться в теме того, как можно обрабатывать ошибки, и в чем разница

Исключения

Что-то ломается, у тебя вылезает ошибка, программа останавливается. При этом, указывается traceback ошибки

Монады

Все значения, которые функции возвращают, у нас оборачиваются в прослойку, она может быть Ok или Wrong (для примера. Ok - ошибки нет. Wrong - ошибка есть. мы сами з коде пишем, какие значения к каким категориям относятся)

И мы вручную проверяем, вернула ли програма Ok или Wrong. Если Ok - продолжаем программа, если Wrong - выводим ограниченную информацию об ошибке и стопаем программу

Я скажу две вещи:

Первая -

НЕТ НИКАКОЙ РАЗНИЦЫ. В ОБОИХ СЛУЧАЯХ ТЫ ПРОСТО ПРОПИСЫВАЕШЬ ИНФОРМАЦИЮ ОБ ОШИБКЕ И СТОПАЕШЬ ПРОГРАММУ (в большинстве случаев)

Вторая -

то, как реализованы монады в Go - это уродство. в Go тебе надо при каждом вызове функции писать

result, err := func()

if err != nil {...}

то есть при каждом вызове функции тебе надо говорить, че делать, если функция вернула ошибку (в большинстве случаев выбрасывать panic). это ничуть не лучше try... except, это не элегантно. в Rust чуть получше сделали с паттерн-матчингом результатов функции

Короче, тема непрактичная и оверхайп. Опять программисты по хуйне в интернете сруться

Но это я знаю точно:

- если ты обрабатываешь ошибки так, то тебя надо уволить:

try:

...

except:

pass

- если ты возвращаешь None в случае неуспеха программы, и не райзишь эксепшн, то так тоже делать нежелательно

Ссылка на оригинальный пост: https://t.me/sh1nke9/354

Обработка ошибок. Исключения vs Монады Программирование, Программист, Интернет, IT, Rust, Python, Программа, Тестирование, Мат

мем хаха