1

I have been programming for over 15 years now. I consider myself a very good programmer, but I understand (like all of us) there are things that I need to work on. One of these things is code repetition when dealing with conditions. I will give a generic sample:

if(condition1)
{
     //perform some logic
     if(condition2)
     {
          //perform some logic
          if(condition3)
          {
               //Perform logic
          }
          else
          {
               //MethodA(param)
          }
     }
     else
     {
          //MethodA(param)
     }
}
else
{
     //MethodA()
}

Now, I cannot make it easy by doing the following:

if(condition1 && condition2)
{

}
else
{

}

I cannot do this since I need to perform some logic if condition1 is true and before I test condition2.

Is there a way to structure if...else blocks to where if you need to call a method in each else blocks, you are not repeating yourself?

gnat
  • 20,543
  • 29
  • 115
  • 306
Ethosik
  • 119

1 Answers1

5

Your piece of code can easily be rewritten into:

if(not condition1)
{
    MethodA()
    return
}

//perform some logic
if(condition2)
{
     //perform some logic
     if(condition3)
     {
          //Perform logic
          return
     }
}

MethodA(param)

Then, a part of the code can be extracted into a method:

int Hello()
{
    if(condition1)
    {
        World()
    }
    else
    {
        MethodA()
    }
}

void World()
{
    //perform some logic
    if(condition2)
    {
        //perform some logic
        if(condition3)
        {
            //Perform logic
            return
        }
    }

    MethodA(param)
}

The custom logic in conditions is preserved, but you don't have code duplication.

Also, when code duplication is just a call of a method, this is not so annoying as if there was several LOCs repeated or if you were repeating a call with the same five arguments. Refactor it if it's easy; if not, duplication is fine.