Ваш пример кода неверен:
do{
document.write("ok");
}while(x == "10"){
document.write("ok");
}
Это будет фактическая форма:
do {
document.write("ok");
} while(x == "10");
Вы правы, что он выполняет внутренний блок кода перед проверкой условия, но это не требует чтобы продублировать внутренний блок кода в том виде, в каком он у вас есть. Конструкция do / while - это (как вы уже сказали) способ убедиться, что фрагмент кода выполняется 1 или более раз вместо 0 или более раз (в зависимости от условия).
Как видите, во втором примере вам пришлось повторить ту же строку . Когда вы поддерживаете, вы, скорее всего, хотите, чтобы эти две строки были одинаковыми, но вы повторяли себя .
Теперь представьте, что это был большой блок , а не линия, он не только займет ненужное драгоценное визуальное пространство , но и будет сложнее поддерживать ] и привлекают несоответствия .
Разница наиболее важна, когда у вас есть более одной строки кода, которая должна быть выполнена хотя бы один раз. Имитация цикла do с помощью цикла while приведет к существенному дублированию кода, что всегда плохо. Конечно, лучшим решением будет рефакторинг этого кода в метод, а затем просто вызов одного и того же метода до и после цикла, но многим людям не нравится даже такое дублирование, а использование ключевого слова do
однозначно заявляет "это цикл, управляемый ногами".
Итак, в основном, читабельность и основные принципы SE.
Прежде всего, ваш синтаксис do.. while
неверен. Это примерно так:
do
{
document.write("ok");
}while(x=="10");
Это полезно, когда вы хотите выполнить тело цикла хотя бы один раз, не оценивая его конечное условие. Например, допустим, вы хотите написать цикл, в котором вы запрашиваете у пользователя ввод и в зависимости от ввода выполняете некоторый код. Вы бы хотели, чтобы это было выполнено хотя бы один раз, а затем спросите пользователя, хочет ли он продолжить. В таких случаях цикл do.. while
дает меньший и более чистый код по сравнению с циклом while
.
Вам не хватает того, что вы используете do ... а
выше на 100% НЕПРАВИЛЬНО !
Цикл do ... while
в Java, например, выглядит примерно так:
do {
//something you want to execute at least once
} while (someBooleanCondition);
Видите полное отсутствие второго блока? Видите, как , а
полностью завершает утверждение? Итак, что происходит сейчас, так это то, что код в паре {...}
между do
и , в то время как
будет выполнен, затем someBooleanCondition
будет протестирован, и если это правда, блок кода будет выполнен снова. И снова. И снова. Пока someBooleanCondition
не будет проверено как ложное.
И здесь, возможно, вы поймете, почему у нас есть обе формы цикла. Приведенный выше код можно преобразовать в:
//something you want to execute at least once
while (someBooleanCondition) {
//something you want to execute at least once
}
Этот код, однако, требует, чтобы вы набрали один и тот же (потенциально большой и сложный) код дважды, оставляя дверь открытой для других ошибок. Отсюда необходимость в нижнем тестовом цикле вместо верхнего тестового цикла.
Это лучший способ написания кода:
int count = ReadDataFromStream();
while(count != 0)
{
count = ReadDataFromStream();
}
Можно написать с использованием do-while как:
int count = 0;
do
{
count = ReadDataFromStream();
} while(count != 0);
Есть лучшие примеры do-while, но я не смог вспомнить в данный момент.
do while выполнится хотя бы один раз - позволяя вам делать, while... тогда как 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
А как насчет:
do{
//.....
// 100000 lines of code!
//.....
} while(i%10);
Конечно, вы не будете писать это:
//.....
// 100000 lines of code!
//.....
while(i%10){
//.....
// 100000 lines of code!
//.....
}
И тогда вы будете вынуждены использовать цикл do-while
Благослови его Бог!!!
Редактировать:
Или вы будете использовать процедуры...