在Douglas Crockford 所着的Javascript:The Good Parts一书中,这是作者对继续声明所说的全部内容:
该
continue声明跳转到循环的顶部.我从未见过一段没有通过重构来删除continue语句而得到改进的代码.
这真让我困惑.我知道Crockford对JavaScript有一些非常自以为是的看法,但这对我来说听起来完全错了.
首先,continue不仅仅是跳到循环的顶部.默认情况下,它也会进入下一次迭代.那么克罗克福德的陈述是不是完全虚假的信息呢?
更重要的是,我并不完全理解为什么continue甚至会被认为是坏事.这篇文章提供了似乎一般的假设:
为什么在循环中继续一个坏主意?
虽然我理解continue在某些情况下如何使代码难以阅读,但我认为它可以使代码更具可读性.例如:
var someArray=['blah',5,'stuff',7];
for(var i=0;i<someArray.length;i++){
if(typeof someArray[i]==='number'){
for(var j=0;j<someArray[i];j++){
console.log(j);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这可以重构为:
var someArray=['blah',5,'stuff',7];
for(var i=0;i<someArray.length;i++){
if(typeof someArray[i]!=='number'){
continue;
}
for(var j=0;j<someArray[i];j++){
console.log(j);
}
}
Run Code Online (Sandbox Code Playgroud)
continue在这个具体的例子中并不是特别有益,但它确实证明了它减少了嵌套深度的事实.在更复杂的代码中,这可能会提高可读性.
Crockford没有解释为什么continue不应该使用,所以这个意见背后有一些更深层次的意义,我错过了吗?
在这个代码示例中,有没有办法从catch块继续外部循环?
while
{
// outer loop
while
{
// inner loop
try
{
throw;
}
catch
{
// how do I continue on the outer loop from here?
continue;
}
}
}
Run Code Online (Sandbox Code Playgroud) 今天有人告诉我return在Java中使用关键字.我编写了一个简单的for循环来验证数组中的某些东西.假设array是一个长度为n的数组,这是我的代码:
for (int i = 0; i < array.length; ++i) {
if (array[i] == valueToFind) {
return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)
现在有人告诉我这不是很好的编程,因为我n在循环中使用语句,这会导致垃圾收集失灵.因此,更好的代码将是:
int i = 0;
while (i < array.length && array[i] != valueToFind) {
++i;
}
return i != array.length;
Run Code Online (Sandbox Code Playgroud)
问题是我无法正确地阐述为什么第一个for循环不是一个好习惯.有人可以给我一笔费用吗?
我有一个简单的C代码和关于包含逗号(,)运算符的表达式的大混乱.
int main(){
int i=0,j=11,c;
c=i=j,++i;
printf("c=%d i=%d\n",c,i);
c=(i=j,++i);
printf("c=%d i=%d\n",c,i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印:
c=11 i=12
c=12 i=12
Run Code Online (Sandbox Code Playgroud)
我的问题是:
++比更优先,和=,为什么评价为表达做了左逗号?continue ×2
while-loop ×2
c ×1
c# ×1
comma ×1
for-loop ×1
java ×1
javascript ×1
loops ×1
operators ×1
readability ×1