Java Coding standard / best practices - naming convention for break/continue labels

前端 未结 10 2365
难免孤独
难免孤独 2020-12-15 05:36

Sometimes a labeled break or continue can make code a lot more readable.

OUTERLOOP: for ( ;/*stuff*/; ) {
    //...lots of code

    if ( isEnough() ) break         


        
10条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-15 06:15

    I don't understand where this "don't use labels" rule comes from. When doing non-trivial looping logic, the test to break or continue isn't always neatly at the end of the surrounding block.

    outer_loop:
    for (...) {
      //  some code
      for (...) {
        //  some code
        if (...)
          continue outer_loop;
        //  more code
      }
      //  more code
    }
    

    Yes, cases like this do happen all the time. What are people suggesting I use instead? A boolean condition like this?

    for (...) {
      //  some code
      boolean continueOuterLoop = false;
      for (...) {
        //  some code
        if (...) {
          continueOuterLoop = true;
          break;
        }
        //  more code
      }
      if (continueOuterLoop)
        continue;
      //  more code
    }
    

    Yuck! Refactoring it as a method doesn't alleviate that either:

    boolean innerLoop (...) {
      for (...) {
        //  some code
        if (...) {
          return true;
        }
        //  more code
      }
      return false;
    }
    
    for (...) {
      //  some code
      if (innerLoop(...))
        continue;
      //  more code
    }
    

    Sure it's a little prettier, but it's still passing around a superfluous boolean. And if the inner loop modified local variables, refactoring it into a method isn't always the correct solution.

    So why are you all against labels? Give me some solid reasons, and practical alternatives for the above case.

提交回复
热议问题