Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re^2: When throw exceptions?

by chrestomanci (Priest)
on Jul 11, 2012 at 08:07 UTC ( #981042=note: print w/replies, xml ) Need Help??

in reply to Re: When throw exceptions?
in thread When throw exceptions?

I disagree, (And I can tell you have not done any coding in Java). Exceptions are exceptional, but they need not be fatal errors. In OO development it makes sense for a method call to return useful results via it's normal return, and to signal problems via thrown exceptions that can be caught by the caller. (or further up the call stack).

For example, consider the Java exception class Class FileNotFoundException. If you where writing an interactive application, then it would usually make sense to catch this exception, because the likely cause would be something like the user mis-typing a file name. In other words, not a fatal error, but something that can easily be dealt with. It is also a subclass of, which makes sense as in a lot of situations you would want to handle many different types of I/O problems in the same way, so you can catch them all by having a catch statement for the superclass.

Compare that with using return codes to indicate exceptions. You end up in a situation where -1 is File not found, -2 is permission denied etc. You have to document all the different return codes, and carefully propagate them back through several layers of callers. Your code also becomes much more verbose as you need to check return codes on every API call, and save them to propagate back up, this becomes doubly complicated if you are using a third party API with a different convention on what is meant by each status number. It is far easier, (and more concise) to write clean code that mostly assumes that stuff will work, and does not needlessly repeat exception handling stuff.

Another great feature of exception handling via throwing and catching them is that the catch can be several calls up the stack from the throw. So you can have a private method that actually does the work several layers down from the public methods of a class and still reliably return errors.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://981042]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (11)
As of 2017-03-28 08:37 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (328 votes). Check out past polls.