On Tuesday, 7 June 2022 at 18:37:13 UTC, Steven Schveighoffer
wrote:
My very common use of `scope(failure)` for my DB code:
```d
conn.exec("START TRANSACTION");
scope(success) conn.exec("COMMIT");
scope(failure) conn.exec("ROLLBACK");
```
This is hard to encapsulate into a type, as dtors only hook
`scope(exit)` essentially.
-Steve
That's fine as the Throwable is still thrown but since
`scope(failure)` acts as like catch-block, people may use it as
replacement if there is something more to do.
I personally like the clean, short syntax when I don't care about
the actual exception or if I know the called function has already
handled the exception and just rethrows it:
```d
bool fun() {
scope(failure) {
// do something
return false;
}
badCode();
return true;
}
```
I know this is bad as I'm capturing a possible error here - but
this is what an unexperienced coder would do, because it works.
The better approach would be to use `scope(exception)` (not
typed, just as keyword) that allows to act only on Exceptions so
one cannot break Exception vs Error paradigma and this also
clarifies that usage of `scope(failure)` is potentially dangerous
if you return from it.
Anyway, I just put that here - maybe you mention it in your blog.