相关疑难解决方法(0)

为什么JavaScript中的"继续"语句不好?

在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不应该使用,所以这个意见背后有一些更深层次的意义,我错过了吗?

javascript readability continue

62
推荐指数
3
解决办法
2万
查看次数

在嵌套的while循环中继续

在这个代码示例中,有没有办法从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)

c# loops continue while-loop

55
推荐指数
5
解决办法
5万
查看次数

返回for循环或外循环

今天有人告诉我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循环不是一个好习惯.有人可以给我一笔费用吗?

java for-loop while-loop

26
推荐指数
2
解决办法
7万
查看次数

在C中,为什么包含逗号(,)运算符的表达式(Statement)的工作方式不同

我有一个简单的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)

我的问题是:

  1. 逗号(,)作为运算符的实际工作是什么?
  2. ++比更优先,=,为什么评价为表达做了左逗号?
  3. 如果表达式包含具有不同优先级的运算符,它将依赖于逗号(,)?
  4. 它表现得像分号的替代品(;)?

c operators comma operator-keyword

7
推荐指数
1
解决办法
609
查看次数