Hi internals,

I think it's just as good to write:
if ($condition) return $retval;
Yes, there are subtle semantic differences the new syntax would emphasize, but 
it doesn't feel like it justifies it. New syntax also means the need to support 
it, for IDEs and other tools, static analysis tools, code-style tools - and all 
that for a very tiny benefit, if any.
Cheers,
Victor

Sent from Mailspring 
(https://link.getmailspring.com/link/85c8412b-b04a-4853-8c4c-e270fcb35...@getmailspring.com/0?redirect=https%3A%2F%2Fgetmailspring.com%2F&recipient=aW50ZXJuYWxzQGxpc3RzLnBocC5uZXQ%3D),
 the best free email app for work
On May 10 2020, at 5:49 pm, Ralph Schindler <ra...@ralphschindler.com> wrote:
> Hi! # Intro I am proposing what is a near completely syntactical addition 
> (only change is to language.y) to the language. The best terminology for this 
> syntax is are: `return if`, "return early", or "guard clauses". see: 
> https://en.wikipedia.org/wiki/Guard_(computer_science) Over the past few 
> years, I've seen a growing number of blog posts, conference talks, and even 
> tooling (for example code complexity scoring), that suggest writing guard 
> clauses is a good practice to utilize. I've also seen it more prevalent in 
> code, and even attempts at achieving this with Exceptions (in an HTTP 
> context) in a framework like Laravel. see abort_if/throw_if: 
> https://laravel.com/docs/7.x/helpers#method-abort-if It is also worth 
> mentioning that Ruby has similar features, and I believe they are heavily 
> utilized: see: 
> https://github.com/rubocop-hq/ruby-style-guide#no-nested-conditionals # 
> Proposal In an effort to make it a first class feature of the language, and 
> to make the control flow / guard clause
s more visible when scanning code, I am proposing this in the syntax of adding 
`return if`. The chosen syntax is: return if ( if_expr ) [: 
optional_return_expression] ; As a contrived example: function 
divide($dividend, $divisor = null) { return if ($divisor === null || $divisor 
=== 0); return $dividend / $divisor; } There is already a little discussion 
around the choice of order in the above statement, the main take-aways and (my) 
perceived benefits are: - it keeps the intent nearest the left rail of the code 
(in normal/common-ish coding standards) - it treats "return if" as a 
meta-keyword; if must follow return for the statement to be a guard clause. 
This also allows a person to more easily discern "returns" from "return ifs" 
more easily since there is not an arbitrary amount of code between them (for 
example if the return expression were after return but before if). - it has the 
quality that optional parts are towards the end - is also has the quality that 
the : return_expression;
 is very symmetrical to the way we demarcate the return type in method 
signatures "): return type {" for example. - has the quality of promoting 
single-line conditional returns # Finally One might say this is unnecessary 
syntactic sugar, which is definitely arguable. But we do have multiple ways of 
achieving this. Of course all of these things should be discussed, I think 
sub-votes (should this PR make it that far) could be considered. The PR is 
located here: https://github.com/php/php-src/pull/5552 As mentioned, some 
discussion is happening there as well. Thanks! Ralph Schindler PS: since 
implementing the ::class feature 8 years ago, the addition of the AST 
abstraction made this kind of syntactical change proof-of-concept so much 
easier, bravo! -- PHP Internals - PHP Runtime Development Mailing List To 
unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to