while-l oop с пустым телом и назначением в условии - PullRequest
0 голосов
/ 21 апреля 2020

Недавно я столкнулся со следующей конструкцией в заброшенном проекте с кодом PHP:


while(($my_var = mt_rand(3, 6))%2 != 0);

(обратите внимание на пустое тело l oop). Это гарантирует, что $ my_var будет присвоен номер 4 или номер 6.

Есть ли (измеримое, объективное) преимущество в использовании вышеупомянутой конструкции по сравнению с чем-то вроде

$my_var = mt_rand(2, 3) * 2;

(Мне особенно интересно, почему автор решил включить 3 в диапазон рандомизации, если результат должен быть даже в любом случае.)

1 Ответ

1 голос
/ 22 апреля 2020
while(($my_var = mt_rand(3, 6))%2 != 0);

Это гарантирует, что $ my_var назначается либо число 4, либо число 6.

Как упоминалось в комментариях @Oli, это очень запутанно и трудно читать.

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

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

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