Ostatnio w książce 'Functional thinking' natknąłem się na stwierdzenie, że rzucanie wyjątków łamie dwie zasady programowani funkcyjnego:
- powoduje side-effect, więc funkcja nie jest już 'pure'
- powoduje, że tracimy 'referential transparency'
jednakże niektóre wątki na stackoverflow zdają się być sprzeczne z tym co Neal Ford opisał w swojej książce (np. ten https://stackoverflow.com/questions/10703232/why-is-the-raising-of-an-exception-a-side-effect).
Jak to jest z tym rzucaniem exceptionów - jest to dopuszczalne w programowaniu funkcyjnym czy nie? Jak to wygląda w praktyce - czy wprowadzenie Either albo czegos Either-podobnego zamiast try/catch daje wam jakiś zysk? Jest mniej błędów? można mieć spokojniejszy sen podczas oncalla?. Czy robicie to tylko po to, żeby poczuć wyższość nad ludźmi, którzy nie chcą wyjść poza świat OOP?
Całe życie byłem przyspawany do Javy i try/catch to było to dzięki czemu miałem pracę, ale zauważyłem, że sporo języków np. golang czy typescript pozwala na coś bardzo zbliżonego do Either, ale lepiej zintegrowane z językiem.