Re: Exception Names
Eric Sosman <Eric.Sosman@sun.com> writes:
to write to a read-only file, and yet we've got FileNotFoundException.
We also have File#exists() and File#canWrite(). This is not so
When testing such properties before using them, there always
is the slight chance that the properties might have changed in
the meantime.
Therefore, the operation to use the property must have a means
to signal a failure. But this means does not have to be an
exception, it also can be any other possible path of
information transfer to a caller, like the value of the call
expression.
Now, often they say that exceptions should be used for
?exceptional situations?, but this might be a tautology. It
does not actually explain, what constitutes an ?exceptional
situation?.
I just had the idea of another approach: The notation of calls
of Methods in programming was derived from the notation of
functions in mathematics?:
y = sin x (1)
. This means ?y is the sine of x.?. It makes sense even as a
natural-language sentence: The order of the words in (1) is
the same order as in the English-language sentence.?
Therefore, one can consider a program with
y = sin x
as very readable.
write( value, file ); (2)
also can be nearly-parsed as natural language: ?Write the
value to the file.?
But when both value-methods and action-methods are mixed
we get:
status = write( value, file ); (3)
. Now there is no natural-language English sentence anymore
that makes sense, correctly describes what is intended by the
above statement, and preserves the order of words (structure)
of the above statement (3). Also, such usage is not known in
mathematics.
With exceptions, one can continue to use the more ?natural?
forms of function/procedure call as in (1) and (2).:
try
{ write( value, file ); }
catch( final java.example.cantWriteToFileException e )
{ ... }
Now, this, again, /can/ be nearly-read as a natural-language
sentence: ?Try to write to value to the file, but if your
attempt should fail, then ....?, the order of words is
preserved.
So a guide-line to use exceptions might then be:
?Use exceptions, when this makes your source code more
readable. Especially, to give the call site a more
natural-language-like structure.?
?: The Java Code Convention to always use verbs for method
names are not followed by Sun Microsystems, Inc. itself:
?Methods should be verbs?
http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html#367
?static double sin(double a)?
http://download.java.net/jdk7/docs/api/java/lang/Math.html#sin(double)
The correct guideline is given by Rob Pike:
?Procedure names should reflect what they do;
function names should reflect what they return.?
http://www.lysator.liu.se/c/pikestyle.html
For function names, this corresponds with the proven practice
of mathematics. For both function names and procedure names,
it corresponds with the structure of natural languages (at
least, of English, the lingua-france of programmers). So it
will make programs more readable.