对于基于条件检查的循环

时间:2014-07-21 14:53:34

标签: if-statement for-loop conditional

我正在寻找编写以下代码的最佳方法。

if (condition == true)
for (i = 0; i < 200; i++)
{
/// 600 lines of code
}

else
for (i = 200; i > 0; i--)
{
/// same 600 lines of code as in above condition check
}

截至目前,我在两个循环中都复制了相同的代码。但有没有办法检查,然后只有代码出现一次?唯一依赖于条件检查的是循环的工作方式。我必须根据条件检查在循环中前进或后退,并且不希望将相同的600行代码粘贴两次。我是用C写的。

1 个答案:

答案 0 :(得分:1)

不是让两个循环变量略有不同的循环,而是根据条件改变循环变量,因此它有效地从0到200或从200到0计数。

for (iteration = 0; iteration < max; iteration++)
{
    index = (condition == true)  ?  iteration  :  max-iteration;
    //  600 lines of code, using index
}

您可能想要添加评论,以便其他人(以及您以后)知道应该做什么。

然而,即便如此你应该尝试将这600行代码重构为一个单独的方法 - 或者说是几个单独的方法,每个方法处理这600行的一个方面。根据经验:i)无论何时重复代码,无论是600行还是10行,都要尝试使它成为一种方法,ii)每当你有一个很长的代码块时,即使它是重复多次,尝试将其分成几种方法。这将使代码更具自我描述性并且更易于维护。

这可能并不总是那么容易,例如如果这600行访问和修改在循环外声明的许多变量,但是再次,这本身可能是设计中的另一个缺陷......