Benas,

> On May 10, 2020, at 15:19, Benas IML <benas.molis....@gmail.com> wrote:
> 
> Hello,
> 
> I think that we SHOULD not introduce a new keyword (e. g.  guard) since that
> would be a "major major" backwards incompatibility. "Guard" is a really 
> generic
> word and a great example of that is Laravel and their authentication guards.
> 
> In general, I don't think that early returns require a seperate syntax and/or
> block statement since a simple `if (...) { return; }` is already sufficient
> enough.
> 
> Best regards,
> Benas Seliuginas


I think there's three main reasons for guard, as opposed to if:

1) It further and clearly establishes intent: if you see guard, you have more 
information about the programmer's intent and what the code will actually do.
2) It prevents having to negate the condition: guard (is valid) else, instead 
of if (not valid) then; negations impose additional cognitive load when 
attempting to understand code, especially if your condition already has a 
negation.
3) The language provides a guarantee that if the guard condition is not met, 
execution can not proceed past the else clause. This helps prevent accidental 
fall-through, such as if you wrote: if(!$valid) { terminate(); } expecting it 
to end execution (e.g. via a throw or exit), but for some reason it failed to 
do so.

To take an idea from Ralph's original proposal, perhaps some syntax like "if 
guard (condition) else ...". In this context, guard could not possibly be 
confused with a function from the parser's point of view, instead serving as an 
intent modifier to if.

-John

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to