Language agnostic 为什么要使用“a”;“边做边做”;环

Language agnostic 为什么要使用“a”;“边做边做”;环,language-agnostic,while-loop,do-while,Language Agnostic,While Loop,Do While,我一直不明白为什么需要使用do while循环。我理解它们的作用,即执行while循环包含的代码,而不首先检查条件是否为true 但下面的代码不是吗 do{ document.write("ok"); } while(x == "10"); 与以下内容完全相同: document.write("ok"); while(x == "10"){ document.write("ok"); } 也许我很愚蠢,遗漏了一些明显的东西,但我不认为在上面的例子中使用do while有什么好

我一直不明白为什么需要使用do while循环。我理解它们的作用,即执行while循环包含的代码,而不首先检查条件是否为true

但下面的代码不是吗

do{
    document.write("ok");
}
while(x == "10");
与以下内容完全相同:

document.write("ok");
while(x == "10"){
    document.write("ok");
}

也许我很愚蠢,遗漏了一些明显的东西,但我不认为在上面的例子中使用do while有什么好处。

do while至少会运行一次-让你这样做,而。。。如果需要满足条件才能启动

var i = 6;
do{
    alert(i);
}while( i < 5)

// alerts 6, but while criteria isn't met so it stops

var i = 6;
while( i < 5) {
  alert(i);
}

// no output - while condition wasn't met
var i=6;
做{
警报(一);
}而(i<5)
//警报6,但如果未满足条件,则会停止
var i=6;
而(i<5){
警报(一);
}
//无输出-未满足条件时

您的示例代码错误:

do{
    document.write("ok");
}while(x == "10"){
    document.write("ok");
}
这将是实际的形式:

do {
    document.write("ok");
} while(x == "10");

在检查条件之前,它执行内部代码块是正确的,但是它不需要按照您的方式复制内部代码块。do/while构造(如您所述)是确保一段代码执行1次或多次而不是0次或多次(取决于条件)的一种方法。

当您至少要执行一次多行代码时,差异最为重要。用while循环模拟do循环将导致大量代码重复,这通常是不好的。诚然,更好的解决方案是将代码重构成一个方法,然后在循环之前和循环中调用相同的方法,但许多人甚至不喜欢如此多的重复,并且使用
do
关键字明确声明“这是一个脚控制的循环”


因此,基本上,可读性和基本SE原则。

您缺少的是您对
的使用……而上面的
是100%错误的

例如,Java中的
do…while
循环如下所示:

do {
  //something you want to execute at least once
} while (someBooleanCondition);
do
{
  document.write("ok");
}while(x=="10");
看到没有第二个街区了吗?查看
while
如何完全结束语句?所以现在发生的事情是,
do
之间的
{…}
对中的代码将被执行,然后
someBooleanCondition
将被测试,如果是真的,代码块将再次执行。一次又一次。一次又一次。直到
someBooleanCondition
测试为false

在这一点上,也许你们会理解为什么我们有两种形式的循环。上述代码可翻译为:

//something you want to execute at least once
while (someBooleanCondition) {
  //something you want to execute at least once
}

但是,此代码要求您键入相同(可能较大且复杂)的代码两次,从而为更多错误敞开大门。因此需要一个底部测试循环而不是顶部测试循环。

首先,你的
do..while
语法是错误的。是这样的:

do {
  //something you want to execute at least once
} while (someBooleanCondition);
do
{
  document.write("ok");
}while(x=="10");
当您希望至少执行一次循环体而不评估其终止条件时,它非常有用。例如,假设您想编写一个循环,在其中提示用户输入,并根据输入执行一些代码。您希望至少执行一次,然后询问用户是否希望继续。在这种情况下,
do..while
循环比
while
循环产生的代码更少、更干净。

  • 如您所见,您必须重复第二个示例中相同的行。 当您进行维护时,您很可能希望这两行是相同的,但是您重复了自己的操作

  • 现在想象一下,这是一个大块而不是一条线,不仅需要不必要的宝贵视觉空间,而且维护和吸引不一致也会变得困难


    • 这是一种更好的编写代码的方法:

      int count = ReadDataFromStream();
      while(count != 0)
      {
          count = ReadDataFromStream();
      }
      
      可以使用do while as编写:

      int count = 0;
      do
      {
          count = ReadDataFromStream();
      } while(count != 0);
      
      有更好的do while示例,但我现在记不起来了。

      关于:

      do{
      
         //.....
         // 100000 lines of code!
         //.....
      
      } while(i%10);
      



      当然,你不会写:

      //.....
      // 100000 lines of code!
      //.....
      
      while(i%10){
      
         //.....
         // 100000 lines of code!
         //.....
      
      } 
      


      然后,您将被迫使用do while循环
      上帝保佑它

      编辑:
      或者您将使用过程..

      尽管

      do { 
          s1;
          ...
          sn;
      } while (p);
      
      可以写成

      boolean done = false;
      while (!done) {
          s1;
          ...
          sn;
          done = !p;
      }
      

      前者更容易理解。

      我现在明白了,我没有意识到这可以避免你不得不复制内部代码。谢谢你的帮助。什么语言有做而没有过程?你可能会把100000行代码放到一个函数中…但重点是。简单地说,把它放到一个函数中:D@NielsLucas是的,但是您也希望避免将许多小功能到处乱放。但是我同意,
      do-while
      的优势不大。@Anakhand你不使用对象吗。。。。?对象(您使用的任何种类/设计模式)应该包含您重复使用的与对象相关的函数。因此,我同意“避免到处乱扔许多小函数”,但我确实希望人们现在使用对象。这是我有点怀念Python中没有
      do while
      的少数情况之一。(尽管在大多数语言中,
      p
      仍然必须在
      do
      范围之外声明,对吗?)