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.



Reply via email to