TryElseExpression DIP
pineapple via Digitalmars-d
digitalmars-d at puremagic.com
Mon Sep 5 11:57:35 PDT 2016
On Monday, 5 September 2016 at 18:27:44 UTC, ag0aep6g wrote:
> Can you point out how this is different from (and better than)
>
> try { do_a_thing(); depends_on_success_of_thing(); }
> catch (...) { ... }
> finally { ... }
>
> ?
On Monday, 5 September 2016 at 18:27:52 UTC, arturg wrote:
> hm, isn't this similar/same as the python version?
>
> try{
> doSomething();
>
> scope(success) "if no Exception thrown".writeln;
> }
> catch(Exception e)
> {
> ...
> }
In this case, the catch block will catch both errors from
do_a_thing and depends_on_success_of_thing. The places where this
sort of pattern is most useful are where you don't want to handle
errors in depends_on_success_of_thing at all, because to have
thrown an error is very unexpected behavior.
Granted scenarios like that are uncommon, but the most important
reason for using the separate `else` scope is to help reduce
programmer error because they forgot that the error handling in
the catch block will break something when it was entered because
depends_on_success_of_thing failed.
There's also the matter of readability and cleanliness. It is (in
my opinion, at least) an intuitive and concise way to handle a
not-uncommon case.
More information about the Digitalmars-d
mailing list