在Java中的for-statements语句中不使用循环变量是不好的风格?

时间:2010-09-20 18:29:41

标签: java coding-style

在Java中for-each语句中忽略循环变量是否被认为是糟糕的样式/劝阻?

我有一些代码看起来像下面这样:

public void makeChecklist( final List<File> inputSrcs ){

   for( File src : inputSrcs ){
      System.out.print( src.getName() + "\t" );
   }
   System.out.println();


   for( File src : inputSrcs ){
      //Not using "src" in this body!
      System.out.print( "[ ]\t" );
   }
   System.out.println();

}

这是个坏主意吗?有什么理由不这样做吗?它看起来比使用常规for循环更清晰。


PS-假设对于上面的示例我希望复选框显示在名称下面,该示例旨在尽可能简单地说明我的问题。

3 个答案:

答案 0 :(得分:8)

肯定看起来很奇怪。我会更明确地说,只有 count 与for循环有关:<​​/ p>

for (int i = 0; i < inputSrcs.size(); i++) {
    System.out.println( "[ ]\t" );
}

我认为这使得意图更清晰。虽然正如评论中指出的那样,我们实际上只是在上面用另一个替换了一个“虚拟”变量。我喜欢它的是显式地调用size(),我相信这表明大小很重要。

用更具表现力的语言,你可能会发现一些东西表明“我只是想要执行n次身体”,这样会更漂亮:

inputSrcs.size().times() {
    System.out.println( "[ ]\t" );
}

(这可能是也可能不是有效的Groovy:)

编辑:另一个显而易见的答案发生在我之前,应该发生在:

printRepeatedly("[ ]\t", inputSrcs.size());

...

private static void printRepeatedly(String text, int count) {
    for (int i = 0; i < count; i++) {
        System.out.println(text);
    }
}

现在在调用方法中,意思是绝对明显的...在printRepeatedly内我们甚至没有拥有列表的上下文,所以我们不可能试图使用这些数据。此时,虚拟变量i显然显然是虚拟变量,方法名称使我们想要这种行为变得明显。

答案 1 :(得分:2)

我认为如果您要这样做,评论会消除很多模糊/潜在的混淆。

答案 2 :(得分:0)

对我来说非常清楚。

你会发现println()添加的换行符 - 而不是print() - 会使你的复选框与你的左边距之外的其他任何东西都没有排列。