Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is "else" rarely used after "if x then return"?

This method:

boolean containsSmiley(String s) {     if (s == null) {         return false;     }     else {         return s.contains(":)");     } } 

can equivalently be written:

boolean containsSmiley(String s) {     if (s == null) {         return false;     }      return s.contains(":)"); } 

In my experience, the second form is seen more often, especially in more complex methods (where there may be several such exit points), and the same is true for "throw" as well as "return". Yet the first form arguably makes the conditional structure of the code more explicit. Are there any reasons to prefer one over the other?

(Related: Should a function have only one return statement?)

like image 347
Todd Owen Avatar asked Jul 16 '10 04:07

Todd Owen


People also ask

Should I use else after return?

Don't put an else right after a return. Delete the else, it's unnecessary and increases indentation level.

Can we use if else in return statement?

Also, you shouldn't refer to an if/else statement as a loop; it is a conditional statement. Loops are used to repeat a piece of code, whereas an if/else is executed only once.

Does a function stop after returning a value?

When a return statement is used in a function body, the execution of the function is stopped. If specified, a given value is returned to the function caller.

Should a method only have one return?

It is sometimes said that a method should have only one return statement (i.e. one exit point) and that to code using more than one return per method is bad practice. It is claimed to be a risk to readability or a source of error. Sometimes this is even given the title of the “single exit point law”.


2 Answers

The else in that case would be redundant, as well as create unnecessary extra indentation for the main code of the function.

like image 196
Delan Azabani Avatar answered Sep 19 '22 13:09

Delan Azabani


In my experience, it depends on the code. If I'm 'guarding' against something, I'll do:

if (inputVar.isBad()) {     return; }  doThings(); 

The point is clear: If that statement is false, I don't want the function to continue.

On the other hand, there are some functions with multiple options, and in that case I would write it like this:

if (inputVar == thingOne) {     doFirstThing(); } else if (inputVar == secondThing) {     doSecondThing(); } else {     doThirdThing(); } 

Even though it could be written as:

if (inputVar == thingOne) {     doFirstThing();     return; } if (inputVar == thingTwo) {     doSecondThing();     return; } doThingThree(); return; 

It really comes down to which way most clearly shows what the code is doing (not necessarily which bit of code is shortest or has the least indentation).

like image 30
Brendan Long Avatar answered Sep 19 '22 13:09

Brendan Long