为什么虽然(真实)是不好的做法?

时间:2015-04-15 09:18:55

标签: loops while-loop

我在许多项目中使用while循环。这对我很有帮助而且并不过分复杂。那么,为什么使用true循环无限运行后台进程是一个坏主意。谢谢你的回答。

3 个答案:

答案 0 :(得分:5)

这不是一个坏习惯,它只是意味着你不认为你的代码通过。

需要条件告诉循环何时完成循环。如果你有一个终止点,那么为什么不把它作为一个条件?

var i = 0;
while(true){
   i++;
   if(i == 100)
      break;
}

这是很好的代码。但这也是:

var i = 0;
while(i != 100){
   i++;
}

这两种方法都是正确的,但是如果其他人正在阅读你的代码,那么当循环停止迭代时,如果它正好在那里,那么就更容易看到。

答案 1 :(得分:5)

  

我的项目负责人不允许在我的代码中使用这种循环,他认为必须将其替换为while(!exit_flag)

这是非常值得商榷的。 while (!exit_flag)表明该循环具有自然退出条件,它将在某个特定点自行到达,例如从0到100计数然后离开循环的东西。但是,如果您正在编写此循环以创建永久守护程序或事件循环,那么此循环的目的是使程序无限期地运行。没有什么比while (true)更好地无限期

两者之间没有真正的技术差异;这只是可读性和意图表达的问题。当然,你必须将这个与那些最终会阅读该代码的人联系起来。如果他们的政策是while (!exit_flag),那就这样吧。

答案 2 :(得分:4)

嗯,请问一个声称这是一个坏主意的人#34;

我能想到的是,无限期运行的循环必须在某个时刻结束,当然,除非您希望程序永远运行。

如果while没有给出终止的任何标准,则需要有一些其他类型的机制来终止循环代码中隐藏的循环,比如return,break或(yuck - Basic - 但是那个' s可能是语句起源的地方 - 一个" Goto"语句跳到循环之外的一些语句来终止循环。

这样的代码可能很难读取和调试,以前表明程序员并不关心编写干净的代码。然而,现在有了事件驱动的应用程序和结构化的错误处理(参见try ... catch结构),有任何时候都可以使用干净且易于阅读的方法来退出任何类型的循环,因此可以毫不费力地使用(true)。

格尔茨

阿丽娜