Re: Early return (was: Inspiration for a Tombstone.)
| From: | Colin Guthrie | Date: | Sun, 29 Jun 2008 14:23:47 +0000 |
| Subject: | Re: Early return (was: Inspiration for a Tombstone.) | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-276109@lists.php.net to get a copy of this message | ||
Dotan Cohen wrote:
I think this was discussed on this list a while back... or perhaps it was just in an article I read... /me googles.... I think it stemmed from this article: http://www.theregister.co.uk/2007/12/04/multiple_exit_wounds/ See the comments to see how different folks agree/disagree. Personally I do use early return, and use it whenever possible. I find that deep nesting is actually harder to read and in many cases do stuff like: function foo($bar) { if ($bar) return true; return false; } Rather than: function foo($bar) { if ($bar) $rv = true; else $rv = false; return $rv; } If I did need to use a variable for a more complex function I almost always do: function foo($bar) { $rv = false; if ($bar) $rv = true; return $rv; } e.g I *always* "define" the variable at the scope in which I use it. Call me old fashioned but if I generally feel that in the example before last, $rv should not be defined outside of the if/else statement as it was not declared... I know PHP is very loose here, but from a C++ perspective: void foo(int bar) { if (bar) {Even your example above hints at another "political" minefield - Early Return or Multiple Return Points.... (s/Return/Exit/ in this case) Let's not even go there!!!Why not? I do this often, but I am not a professional programmer. I find this to be very useful.
int rv;
rv = 1;
}
else
{
int rv;
rv = 0;
}
return rv;
}
This clearly bombs.
So you generally do:
void foo(int bar)
{
int rv;
if (bar)
rv = 1;else
rv = 0;return rv; } But then you could also do: void foo(int bar) { int rv = 0; if (bar)
rv = 1;return rv; } And so this is how I generally structure my code in PHP too.... call me paranoid/stuck in my ways if you like :) I appreciate I've steered this away from early return :) Col