Почему использование “делает в то время как” цикл? [закрытый]

10
задан casperOne 12 January 2013 в 15:57
поделиться

8 ответов

Ваш пример кода неверен:

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

Это будет фактическая форма:

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

Вы правы, что он выполняет внутренний блок кода перед проверкой условия, но это не требует чтобы продублировать внутренний блок кода в том виде, в каком он у вас есть. Конструкция do / while - это (как вы уже сказали) способ убедиться, что фрагмент кода выполняется 1 или более раз вместо 0 или более раз (в зависимости от условия).

15
ответ дан 3 December 2019 в 13:25
поделиться
  • Как видите, во втором примере вам пришлось повторить ту же строку . Когда вы поддерживаете, вы, скорее всего, хотите, чтобы эти две строки были одинаковыми, но вы повторяли себя .

  • Теперь представьте, что это был большой блок , а не линия, он не только займет ненужное драгоценное визуальное пространство , но и будет сложнее поддерживать ] и привлекают несоответствия .

18
ответ дан 3 December 2019 в 13:25
поделиться

Разница наиболее важна, когда у вас есть более одной строки кода, которая должна быть выполнена хотя бы один раз. Имитация цикла do с помощью цикла while приведет к существенному дублированию кода, что всегда плохо. Конечно, лучшим решением будет рефакторинг этого кода в метод, а затем просто вызов одного и того же метода до и после цикла, но многим людям не нравится даже такое дублирование, а использование ключевого слова do однозначно заявляет "это цикл, управляемый ногами".

Итак, в основном, читабельность и основные принципы SE.

2
ответ дан 3 December 2019 в 13:25
поделиться

Прежде всего, ваш синтаксис do.. while неверен. Это примерно так:

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

Это полезно, когда вы хотите выполнить тело цикла хотя бы один раз, не оценивая его конечное условие. Например, допустим, вы хотите написать цикл, в котором вы запрашиваете у пользователя ввод и в зависимости от ввода выполняете некоторый код. Вы бы хотели, чтобы это было выполнено хотя бы один раз, а затем спросите пользователя, хочет ли он продолжить. В таких случаях цикл do.. while дает меньший и более чистый код по сравнению с циклом while .

1
ответ дан 3 December 2019 в 13:25
поделиться

Вам не хватает того, что вы используете 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
}

Этот код, однако, требует, чтобы вы набрали один и тот же (потенциально большой и сложный) код дважды, оставляя дверь открытой для других ошибок. Отсюда необходимость в нижнем тестовом цикле вместо верхнего тестового цикла.

1
ответ дан 3 December 2019 в 13:25
поделиться

Это лучший способ написания кода:

int count = ReadDataFromStream();
while(count != 0)
{
    count = ReadDataFromStream();
}

Можно написать с использованием do-while как:

int count = 0;
do
{
    count = ReadDataFromStream();
} while(count != 0);

Есть лучшие примеры do-while, но я не смог вспомнить в данный момент.

2
ответ дан 3 December 2019 в 13:25
поделиться

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
6
ответ дан 3 December 2019 в 13:25
поделиться

А как насчет:

do{

   //.....
   // 100000 lines of code!
   //.....

} while(i%10);




Конечно, вы не будете писать это:

//.....
// 100000 lines of code!
//.....

while(i%10){

   //.....
   // 100000 lines of code!
   //.....

} 



И тогда вы будете вынуждены использовать цикл do-while
Благослови его Бог!!!

Редактировать:
Или вы будете использовать процедуры...

4
ответ дан 3 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: