Search code examples
language-agnosticoptimizationfor-loopcode-duplication

How to reduce code duplication in this example


I need to loop through a number (xx). xx always starts at zero. My problem is that if the moveDirection variable is +1 then xx increases until it reaches the positive of range. If moveDirection is -1, then xx decreases until reaching the negative of range.

In the code below, I have done this by having an if statement test for moveDirection first, then I have duplicated the for loop, and edited the values for each case. My code happens to be in ActionScript3, but the language does not matter.

var p:Point;
var xx:int;

if (moveDirection > 0)
{
    for (xx = 0; xx < range; xx++)
    {
        if (hitTestPoint(xx, yy))
        {
            return true;
        }
    }
}
else 
{
    for (xx = 0; xx > range; xx--)
    {
        if (hitTestPoint(xx, yy))
        {
            return true;
        }
    }
}

Is there a better way of doing this, maybe without duplicating the for loop? If there is any other advice, it would be greatly appreciated.


Solution

  • for (xx = 0; xx != range; xx += moveDirection)
    {
        if (hitTestPoint(xx, yy))
        {
            return true;
        }
    }
    

    This assumes that moveDirection will be either 1 or -1 for going up or down, respectively. Also, you'll have to slightly change your range for the != to work properly. But, it does cut down on code.