为什么在while循环中但不能在其中插入分号

问题描述

我为什么要这样做:

if (int result=getValue(); result > 100) {
}

但不能这样做:

while (int result=getValue(); result > 100) {
}

为什么歧视while?条件就是条件。为什么while无法像if那样评估它?

为了通过while实现所需的行为,我必须以这种方式实现它:

int result = getValue();
while (result > 100) {
    //do something
    result = getValue();
}

解决方法

因为我们已经有一个while循环初始化器。拼写为:

for (int result=getValue(); result > 100;) {
}
,

我可以想到不添加此语法的三个原因。

  1. 有一个非常合适的构造,即for循环,可以完全用于此目的。

  2. 在语言中添加任何功能都是一项艰巨的工作,因此对于此类提议,需要提出非常有力的理由。考虑到第一点,我看不到这种情况。

  3. 在我看来,这是最重要的一个功能:如果将此功能添加到了语言中(比如说是为了方便使用语法或类似的东西),那么从根本上讲,从语言中就不可能删除它。这意味着while (;)语法将永远被禁止,并且很可能还有其他一些我们希望使用这种语法表达的语义,并且放弃此选项不是没有仔细考虑就应该做的事情。