Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java编码标准/最佳实践-中断/继续标签的命名约定_Java_Label_Convention - Fatal编程技术网

Java编码标准/最佳实践-中断/继续标签的命名约定

Java编码标准/最佳实践-中断/继续标签的命名约定,java,label,convention,Java,Label,Convention,有时,标记为break或continue可以使代码更具可读性 OUTERLOOP: for ( ;/*stuff*/; ) { //...lots of code if ( isEnough() ) break OUTERLOOP; //...more code } 我想知道标签的一般惯例是什么。所有的帽子?第一杯 惯例是完全避免使用标签 使用标签打破循环的有效理由非常少。中断是可以的,但是您可以通过稍微修改一下设计来完全消除中断的需要。在您给出的示例中,您将提取“大

有时,标记为break或continue可以使代码更具可读性

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

    if ( isEnough() ) break OUTERLOOP;
    //...more code
}

我想知道标签的一般惯例是什么。所有的帽子?第一杯

惯例是完全避免使用标签

使用标签打破循环的有效理由非常少。中断是可以的,但是您可以通过稍微修改一下设计来完全消除中断的需要。在您给出的示例中,您将提取“大量代码”部分,并将它们放在具有有意义名称的单独方法中

for ( ;/*stuff*/; ) 
{
    lotsOfCode();

    if ( !isEnough() )
    {
        moreCode();
    }
}


Edit:看到了有问题的实际代码(),我认为使用标签可能是使代码可读的最好方法。在大多数情况下,使用标签是错误的方法,在这种情况下,我认为这是好的。

对流/最佳实践仍然是根本不使用标签,并重构代码,以便使用extract as方法更具可读性。

如果必须使用标签,请使用大写字母,这引起了人们对它们的注意,并使它们避免被错误地解释为“类”名称。吸引人们的注意力还有一个额外的好处,那就是吸引别人的眼球,从而重构代码并删除它们

它们有点像Java的后起之秀——不确定C#是否拥有它们。我从未在实践中使用过它们,我想不出哪种情况下,避免使用它们不会导致更可读的代码

但是如果你不得不这样做的话,我想所有的帽子都可以。大多数人不会使用带标签的换行符,因此当他们看到代码时,大写字母会跳出来,迫使他们意识到发生了什么

我知道,我不应该使用标签

但只要假设,我有一些代码,可以从标记的中断中获得很多可读性,我如何格式化它们

莫,你的前提是错误的。 问题不应该是“如何设置格式?”

您的问题应该是‘我的代码在循环中包含大量逻辑—如何使其更具可读性?’


这个问题的答案是将代码移动到单独的、命名良好的函数中。然后,您根本不需要标记中断。

我最熟悉的约定就是简单的驼峰大小写,比如方法名

myLabel:
但我也看到了以下划线为前缀的标签

_myLabel:
或者和实验室

labSomething:

但是,从其他答案中,您可能会感觉到,您将很难找到一个编码标准,该标准除了“不要使用标签”之外,还包含任何内容。我想答案是,你应该使用任何对你有意义的风格,只要它是一致的。

我不明白“不使用标签”规则从何而来。在执行非平凡的循环逻辑时,中断或继续的测试并不总是整齐地位于周围块的末尾

outer_loop:
for (...) {
  //  some code
  for (...) {
    //  some code
    if (...)
      continue outer_loop;
    //  more code
  }
  //  more code
}
是的,像这样的情况确实经常发生。人们建议我用什么来代替?像这样的布尔条件

for (...) {
  //  some code
  boolean continueOuterLoop = false;
  for (...) {
    //  some code
    if (...) {
      continueOuterLoop = true;
      break;
    }
    //  more code
  }
  if (continueOuterLoop)
    continue;
  //  more code
}
恶心将其重构为一种方法并不能缓解以下问题:

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

for (...) {
  //  some code
  if (innerLoop(...))
    continue;
  //  more code
}
当然它有点漂亮,但它仍然传递了一个多余的布尔值。如果内部循环修改了局部变量,那么将其重构为方法并不总是正确的解决方案

那为什么你们都反对标签呢?对于上述情况,请给出一些确凿的理由和切实可行的替代方案。

wrt:

你给

outerloop:
for (...) {
  //  some code
  for (...) {
    //  some code
    if (...)
      continue outerloop;
    //  more code
  }
  //  more code
}
举个例子。你说得很对。我最好的猜测是:

public void lookMumNoLabels() {
  for (...) {
    // some code
    doMoreInnerCodeLogic(...);
  }
}

private void doMoreInnerCodeLogic(...) {
   for (...) {
      // some code
      if (...) return;
   }
}

但也有一些例子表明,这种重构与您所做的任何逻辑都不匹配。

因为标签很少有用,所以似乎没有明确的约定。Java语言规范有一个带有标签的示例,它们是非大写的

但由于它们如此罕见,在我看来,最好三思而后行,看看它们是否真的是正确的工具


如果它们是正确的工具,请将它们全部设置为大写,以便其他开发人员(或稍后的您)立即意识到它们是不寻常的。(正如Craig已经指出的)

Sun的Java代码风格似乎更喜欢以与变量相同的方式命名标签,这意味着首字母小写的驼峰大小写。

四年后更新:Scala和Clojure等函数式语言有越来越大的趋势,其中不使用标签的建议是有充分理由的。但对于普通Java,我上面的答案仍然有效。和javascrpt以及任何基于事件的语言。因此,对于bean来说,它可能没有那么大的用处,除非这是一些非常(可能太)冗长的事件处理的一部分。奇怪的是,得票最多的答案根本没有回答最初的问题。(“我想知道标签的通用惯例是什么。所有的帽子?第一个帽子?”)没错,@Jonik。我的回答是针对已经被一个观点占据的线索,并希望平衡它。这两个问题都不是对原来问题的真正答案。令人惊讶的是,这是公认的答案。Oracle使用了
test
作为示例标签,很明显这不是大写的(尽管是否应该使用
camelCase
下划线_小写
等更是一个悬而未决的问题)。