代码之家  ›  专栏  ›  技术社区  ›  Sled bayer

在Java中的每个语句中不使用循环变量是坏的风格吗?[关闭]

  •  4
  • Sled bayer  · 技术社区  · 15 年前

    在Java中忽略每个语句中的循环变量是否被认为是很差的风格?

    我有一些代码看起来有点像:

    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 回复  |  直到 15 年前
        1
  •  2
  •   Brian Agnew    15 年前

    我认为,如果你打算这样做,这个评论会消除很多模棱两可/潜在的混乱。

        2
  •  8
  •   Jon Skeet    15 年前

    看起来很奇怪。我会更清楚地说这只是 计数 这与for循环有关:

    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 是公平的 明显地 一个伪变量和方法名使得我们想要这种行为的原因很明显。

        3
  •  0
  •   Matthew Flynn    15 年前

    我觉得很清楚。

    您会发现,println()添加的换行符(而不是print())将使其成为这样,这样您的复选框就不会真正与左边距以外的任何内容对齐。

    推荐文章