On 31/07/2025 09:31, Lynn wrote:
When I read `catch (Foo);` I read the intention of it being on
purpose, whereas `catch (Foo) {}` I can easily interpret as "the
developer forgot to handle the error" or "I can't tell if this is a
bug or not".
As I say, readability is always subjective, but I would just see ";" vs
"{}" as a style choice, no obvious difference in intention. If anything,
it would risk me misreading the code, because I'd be looking for the
braces and not finding them.
A similar argument was made for keeping "var" as an alias of "public",
to indicate ... something; I argued against that reasoning at the
time: https://externals.io/message/91618#91634
I don't think the language needs to allow multiple ways of writing
everything, just so that projects can have subtle conventions of when to
use which one.
Now the boilerplate has increased from {} vs ; to quite some extra,
just to ensure the intention. I don't know if omitting the body for
this is the solution, or if there's something else we can do like:
`ignore(Foo, Bar)`. When I read the code I want the intention to be
clear, and an empty body just makes me doubt whether or not it is
intended and/or correct.
If the aim is to make the intention explicit, we need some syntax that
makes the intention explicit, not just different punctuation we hope
will become established as a convention.
$foo = try $this->doSomething() ignore (Foo, Bar);
I think an inline syntax like this would be a powerful feature, and a
potential replacement for the @ operator:
$fh = null;
$fh = try fopen($filePath, 'w') ignore (FileLockedException);
One challenge would be optimising it so that the exception didn't build
a full stack trace then immediately discard it - this was touched on in
Larry's thread a while back https://externals.io/message/127188
--
Rowan Tommins
[IMSoP]