Monday, 2 June 2008

Why return isn't evil?

We know that GOTO is the root of all evil (OK, GOTO and premature optimization). However, why return is different? For instance, if you write in Java...

boolean equals(Object o) {

if (!o instanceof MyClass.class)
return false;

it is salt, and spice and everything nice, even though it is unstructured. Not only is it OK, it is recommended.
I think I have an idea. In this case you are not breaking the structure of the code. You are just shortcutting a huge else; it is the short for of "else do the rest of the stuff, clear local variables and return a value". However, this doesn't apply for continue of break; In both cases they are unstructed and mean: "continue with an unnamed block of code, but leave variables as they are", which is exactly what GOTO does.

Update Jun 4, 4:04: A colleague reminded me the amazing number of WTFs that can be produced just with returns. I have seen them and they can be as ugly as GOTOs; I mainly meant those clear returns that are nested only one or two levels deep.

Add to Technorati Favorites

No comments: