(This post is a logical sequel to my earlier musings about having a coherent strategy to handle problems.)
Back in the dark ages, programmers wrote functions that returned numeric errors:
if (prepare() == SUCCESS) { doIt(); }
This methodology has the virtue of being simple and fast. We could switch
based on the error code. A “feature” of our apps was that our users could google an error code to see if they had company:
However, as we wrote code, we sometimes forgot to check errors, or tell users about them:
prepare(); doIt();
Admit it; you’ve written code like this. So have I. The mechanism lets a caller be irresponsible and ignore the signal the called function sends. Not good. Even if you are being responsible, the set of possible return values is nearly unbounded, and you get subtle downstream bugs if a called function adds a new return value when a caller is switch
ing return values.
Another problem with this approach to errors Continue reading