@KuzmenkoArtem

На каком примере объяснить цикл do-while для студентов на php?

Работаю преподавателем js / php. Хоть работаю уже достаточно долго так и не нашел реально хорошего примера который бы объяснил преимущества цикла do-while на php.
Какой пример посоветуете вы?
  • Вопрос задан
  • 643 просмотра
Решения вопроса 7
valerium
@valerium
Изобретая велосипед
Не уверен, что подходит для новичков, но как вариант — получение данных, которые могут быть разбиты на несколько страниц. Например, API Яндекс.Расписаний отдаёт не более 100 элементов за раз. На случай, если элементов больше, есть специальная секция pagination и там булевое поле has_next. То есть код должен выглядеть как-то так.
$page = 1;
do {
    $data = jsondecode(file_get_contents("https://api.rasp.yandex.net/...&page=$page"));
    // bla-bla-bla
    $page++;
} while ($data['pagination']['has_next'])


То есть, do while нужен там, где не обойтись одним действием для проверки условия.
Ответ написан
Комментировать
angry_cellophane
@angry_cellophane
Главное отличие do-while - первая итерация обязательно выполнится. Простой пример - консоль. Первая команда обязательно должна быть введена, даже если это exit.
Ответ написан
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
Любой пример, где данных вначале нет, а потом есть, и их надо проверить. То есть вначале получить - потому проверить, и если полученные данные не ОК, то идём на вторую итерацию, заного получать. Отличный пример - атомарная операция замены старого значения на новое на основе compare-and-swap на процессоре. Заодно почитайте что такое CAS, будет полезно.
do {
 old_value = read(address);
 new_value = old_value+1;
} while ( ! cas( address, old_value, new_value ) )
Ответ написан
Комментировать
vakorovin
@vakorovin
Разработчик
Ответ пишу с планшета, не очень удобно, поэтому код не приведу, а расскажу только последнее применение, недельной давности. Как известно, md5(microtime()) не гарантирует уникальности, возможны коллизии. Так вот пример, файловый менеджер на php, во время загрузки файла на сервер генерируется имя по принципу md5(microtime()) . $extension, далее проверяется нет ли такого имени файла в БД. Т.е. в этом случае минимум один раз выполнится необходимая операция. Ээх, приведу и пример кода:

...
do {
    $filename = md5(microtime()) . $extension;
    $file = File::find()->where(["filename"=>$filename])->one(); // yii2 синтаксис
    if ($file === null) break;
} while (true);
...


Есть хороший пример использования do while при работе с пространственными данными, при поиске альтернативного пути (есть карта сети провайдера, в случае аварии ищет свободные волокна на других магистралях), правда сейчас я в отпуске и не могу показать пример кода - его просто нет под рукой, хотя возможно такой пример будт сложным для студентов. А пример выше достаточно прост для понимания и абсолютно точно показывает необходимость в таком цикле.
Ответ написан
Комментировать
xEpozZ
@xEpozZ
Веб-разработчик
может быть какие-то данные из БД в котором есть минимальное кол-во записей: 1?
Ответ написан
BuriK666
@BuriK666
Компьютерный псих
Преимущество такое же как и у do while на любом другом ЯП.
Первое что пришло в голову:
var n = 0, m = 10;
var x  = Math.floor(Math.random() * (m + 1) + n);
var title = 'Угадайте число от ' + n + ' до ' + m;
var z = 0;
do {
  z = prompt (title, z)
  if (z < x) { 
    title = 'Больше';
  } else if (z > x) {
    title = 'Меньше';
  }
} while ( x != z )
alert('Тадааа!!');

PS: Откройте любой учебник по программированию и посмотрите что там пишут про do while.
Ответ написан
Когда приходишь в столовую, тебе наливают суп. Априори, тебе не дают пустую тарелку.
И начинается:
do
{
      есть();
}
while( ! пусто(тарелка) );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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