所以,关于我之前一篇关于Java的do-while语句的问题的评论线程让我再次思考了do/while语句。坦白说,很难看出为什么我们真的需要在现代编程语言中将这个结构作为一等结构。以下是我持这种观点的理由。
首先,至少在C语言类似的语言中,其语法相当不规律。这是唯一一个不遵循这种语法模式的控制语句
( keyword ("(" Something ")")? Block )+
相反,其语法特征有两个辉煌的关键词和一个多余的、完全无关的分号。真奇怪。
(因为,即使有了两个关键词和一对括号的帮助,解析器仍然需要这个额外美味的分号来知道何时停止寻找语句的更多部分。)do/while当然,这有道理。)
无论如何,我认为正是这种不规则性导致了不同的人对do-while语句体内的声明作用域有不同的直觉do/while.
其次, do/while要求我们保留英语中一个最有用的动词作为关键词。如果Java只是允许我用它作为标识符,我可以用这个词找到各种各样的用途!
第三, do/while可以使用一个while循环来模拟。以下
do {
something();
}
while (!finished);
当这样写时,可读性只是略微降低
while (true) {
something();
if (finished) break;
}
而且这种表达方式没有引起关于事物作用域的任何争议。
第四,现有的编程语言都支持高阶函数,允许库引入新的流程控制类型,从而减轻了语言本身提供内置基本语法中所有可能类型的循环的压力。
最后,尽管我在过去的十多年里写了很多Java代码,并且对这种语言相当熟悉,但我几乎无法回忆起何时真正需要过这个结构。除非我的记忆力比我想的还要糟糕,我绝对没有使用过do/while在我的整个职业生涯中,不止两三次了!
因此,我强烈考虑简单地放弃do/whileCeylon。它根本无法承担其重量。