все ли циклы while конвертируемы в циклы for? - PullRequest
0 голосов
/ 02 ноября 2018

ранее, я думал, что мы не можем использовать циклы for при работе со связанными списками ... но потом for(current = head; current != NULL; current = current->next) эта линия заставила меня задуматься. все ли циклы while конвертируемы в циклы for, особенно если существует более одного условия?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Пример кода из моего кода, использующий while таким образом, что я бы не заменил его на for.

public function generateUniqueTokenForEntity(){
    while (true) {
        $token = substr(md5(uniqid()), 0, 10);
        $entry = $databaseTable->findEntryByToken($token);
        if ($entry === null) {
             return $token;
        }
    }
}
0 голосов
/ 02 ноября 2018

В этом случае вы можете использовать циклы for, поскольку вы выполняете итерацию определенное количество раз (один раз для каждого элемента в списке). Это не супер-интуитивно понятное, а наиболее чисто связанное с программированием, которое вы могли бы изменить от чисто истинного / ложного условия выполнения к ограниченному счетному условию выполнения.

Эта линия мышления очень быстро нарушается, если вы задействуете какое-то количество оборудования. Допустим, у вас есть программа, которая включает светодиод, пока вы удерживаете кнопку.

while(button is down) { LED = ON; }

Нечто подобное вы не захотите делать с циклом for, потому что нет способа подсчитать что-то, что нужно знать, когда вы останавливаетесь, количество времени определяется человеком, удерживающим кнопку, и не может быть известно компьютером, пока это не произойдет.

TL; DR: Вы можете использовать циклы для многих вещей, которые не являются интуитивно понятными. Но вы не можете использовать их для замены КАЖДОГО возможного цикла while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...