On Tuesday, 13 January 2015 at 20:58:43 UTC, deadalnix wrote:
On Tuesday, 13 January 2015 at 19:36:31 UTC, Marc Schütz wrote:
On Monday, 12 January 2015 at 23:01:53 UTC, Ola Fosheim
Grøstad wrote:
On Monday, 12 January 2015 at 22:06:32 UTC, deadalnix wrote:
No, Exception are a bail out mechanism. It is the, I have no
idea what to do about this mechanism.
The way it is done in C++, yes.
If you put aside performance concerns, exceptions for
control flow also tend to make many code path implicit and
makes for very unreadable/unmaintainable code.
But exceptions are control flow. There is no such thing as
normalized control flow, all state changes implies "control
flow". Think in terms of a state machine. You could just
remove all variables and only have a big state machine
(assuming finite dimensions). Every single state transition
implies flow of control.
The control flow you see in the source code is just the
programmer's "rendition" of control flow. Exceptions is a
mechanism for getting cluttering resolution out of that
rendition to make the code more readable and maintainable.
The goal is to retain the meat of the computation and remove
the noise.
Or to put it differently, there are many ways to write the
same function. Good use of exceptions removes the clutter and
leaves the things you care about visible. It's a mechanism,
not a moral issue or a religion.
So there is nothing wrong with throwing HTTPStatus(409) or
HTTPStatus(201), even though it returns state to the
environment. If that means the code is more maintainable and
more likely to be correct, then that is good use of the
mechanism.
I usually don't do this, but I really need to post a "+1" here:
+1
Too bad you chose to do this on a bad strawmman.
Your claims:
- Exceptions are for "I have no idea what to do about this"
situations.
- "exceptions for control flow [...] makes for very
unreadable/unmaintainable code"
Ola's answer directly addresses these claims and provides a
counter-example (in the last paragraph), which I happen to agree
with.
=> Not a strawman.