【问题标题】:while-loop with an empty body and an assignment in the condition具有空主体和条件中的赋值的 while 循环
【发布时间】:2020-08-04 03:29:25
【问题描述】:

我最近在一个废弃的 PHP 代码项目中遇到了以下构造:


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

(注意循环的空主体)。这确保 $my_var 被分配了数字 4 或数字 6。

使用上述结构是否有任何(可衡量的、客观的)优势,而不是像

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

(我特别想知道,如果结果必须是偶数,为什么作者选择在随机化范围内包含 3。)

【问题讨论】:

  • 对于这样一个简单的 if/else 结果,该代码看起来完全不可读和神秘......所以不,我认为它没有优势(代码可读性也很重要!)
  • 第一个版本也有缺点,你无法真正预测它会迭代多少次。它可以(理论上)“掷骰子”并在前十、一百或一千次迭代中得出 5 个……甚至永远不会结束。 (mt_rand 的实现可能已经足够好,不会发生这种情况,但仍然如此。)
  • @CBroe 如果您将此作为回复发布,我愿意接受。

标签: php random while-loop variable-assignment


【解决方案1】:
while(($my_var = mt_rand(3, 6))%2 != 0);

这确保 $my_var 被分配了数字 4 或数字 6。

正如@Oli 在 cmets 中提到的,这非常令人费解且难以阅读。

它还有一个缺点,就是你无法真正预测它会迭代多少次。

它可以(理论上)“掷骰子”并在前十、十或千次迭代中得出 5 个……甚至永远不会结束。 (mt_rand 的实现可能已经足够好,不会发生这种情况,但仍然如此。)

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 2010-11-11
    • 2013-09-25
    • 2015-03-22
    • 2013-11-15
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多