Language agnostic 为什么要使用“a”;“边做边做”;环
我一直不明白为什么需要使用do while循环。我理解它们的作用,即执行while循环包含的代码,而不首先检查条件是否为true 但下面的代码不是吗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{
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
范围之外声明,对吗?)