【问题标题】:Is if(){do{};while();} exactly like while{}if(){do{};while();} 是否与 while{} 完全一样
【发布时间】:2012-06-21 13:48:35
【问题描述】:

if(a)
{
    do
    {
        b();
    }
    while(a);
}

一模一样

while(a)
{
    b();
}

?

【问题讨论】:

  • 测试一下:-P jsfiddle.net/LvWtY
  • NO... 它们不完全相同... do{ .. } while(a) ... 将确保至少完成一次然后直到'a'不正确.... while(a) { } ... 仅当 'a' 为真时才会这样做。
  • @Brian:你在第一个 sn-p 中错过了if(a)
  • @user1365010:如果你知道它不是很清楚,那就让它更简单。这些示例包含许多针对手头问题的不必要代码。除非您仔细阅读代码,否则不可能看到任何差异。老实说,鉴于这些怪物(示例),我会说你更有可能做错了什么,而不是这两个构造不等价(因为它们是)。

标签: javascript while-loop do-while


【解决方案1】:

它们是相同的,我将提供一个示例,您可能实际上想要使用“Do-While”而不是 while 循环。

do{
    x = superMathClass.performComplicatedCalculation(3.14);
}
while (x < 1000);

相对于

x = superMathClass.performComplicatedCalculation(3.14);
while ( x < 1000);
{
      x = superMathClass.performComplicatedCalculation(3.14);
}

使用 Do-While 的参数如上所示。 假设行 x = superMathClass.performComplicatedCalculation(3.14); 不仅仅是一行代码,而是 25 行代码。如果您需要更改它,在执行过程中您只需更改一次。在 while 循环中,您必须更改它两次。

我确实同意休息时间,你应该避免他们,但也有支持他们的论点。

【讨论】:

    【解决方案2】:

    是的,它们是等价的。
    如果afalse,则b 根本不会执行。
    如果atrue,则b 将一直执行,直到a 变为false
    这对两种结构同样适用。

    【讨论】:

      【解决方案3】:

      是的,它们是一样的。
      您创建了一种非常难以理解的方式来模拟 while 循环与 do-while 循环 + if

      您应该阅读以下内容:
      Test loops at the top or bottom? (while vs. do while)

      如果您想在循环的第一次迭代之前测试条件,请使用 while 循环。

      如果您想在运行循环的第一次迭代后测试条件,请使用 do-while 循环。

      【讨论】:

        【解决方案4】:

        在这种情况下,结构几乎可以互换,但我认为 if do while 循环在某些情况下很有用,例如,如果某些变量需要在循环的所有迭代中保留,但如果循环不需要永远不会被执行。 (并且假设它可能不是。)例如

                if (condition) {
                    LargeComplexObject object = new LargeComplexObject();
                    do {
                        some action
                        ...
                        object.someMethod();
                        ...
                        more actions
                    }
                    while (condition);
                }
        

        如果该对象的初始化是时间或内存密集型的,这可能是一个有用的优化,并且预计此循环只会偶尔触发,并且会在相关方法的大多数执行中被跳过。当然在其他情况下它也可能有用,基本上我认为如果在循环开始之前应该执行一些事情,则应该使用 if-do-while,只有在进入循环时。

        【讨论】:

          【解决方案5】:

          是的,但您应该更喜欢后者。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-10-07
            • 2010-11-02
            • 2013-02-16
            • 1970-01-01
            • 2020-02-20
            • 2013-10-30
            • 2012-02-29
            • 1970-01-01
            相关资源
            最近更新 更多