tem*_*def 13 java language-design break
我今天刚刚了解到以下Java代码是完全合法的:
myBlock: {
/* ... code ... */
if (doneExecutingThisBlock())
break myBlock;
/* ... more code ... */
}
Run Code Online (Sandbox Code Playgroud)
请注意,这myBlock
不是一个循环 - 它只是一个我用花括号分隔的代码块.
这似乎是一个相当奇怪的特征.这意味着您可以使用命名break
来突破if
语句或匿名块,但通常不能break
在这些上下文中使用语句.
我的问题是:这个设计决定有充分的理由吗? 也就是说,为什么要这样做,你只能使用标记的break
s而不是常规的break
s 来突破某些封闭的语句?为什么要允许这种行为呢?鉴于(相对)精心设计的Java如何作为一种语言,我认为这是有原因的,但老实说,我想不出一个.
irr*_*ble 10
这样做是为了简单起见.如果最初标记的中断只能破坏循环语句,那么语言设计者应该立即明白限制是不必要的,语义对所有语句都是一样的.对于语言规范的经济性,编译器的简单实现,或者只是出于普遍性的习惯,为任何语句定义标记的break,而不仅仅是循环语句.
现在我们可以回顾并判断这个选择.通过赋予程序员额外的表达能力,它是否有益于程序员?似乎很少,该功能很少使用.程序员是否需要学习和理解?似乎是这样,正如这次讨论所证明的那样.
如果你能回去改变它,是吗?我不能说我愿意.我们对一般性有一种迷恋.
如果在并行Universe中它仅限于循环语句,那么有人可能会在stackoverflow上发布问题,这可能要小得多:为什么它不能用于任意语句?
归档时间: |
|
查看次数: |
3622 次 |
最近记录: |