缩进组变量函数调用代码约定

时间:2016-04-19 04:36:48

标签: java coding-style indentation convention

我有这样的习惯:缩进一组这样的函数调用:

List <Dog> dogs = new ArrayList<>();
   dogs.add(new Dog(1));
   dogs.add(new Dog(2));
   dogs.add(new Dog(3));
   dogs.add(new Dog(4));
   dogs.add(new Dog(5));
System.out.println("list of dogs: " + dogs);
Cat cat1 = new Cat(1);
   cat.meow();
   cat.startsRunningFrom(dogs);
Dog d1 = dogs.get(1);
d1.catches(cat1);

这些在代码约定中真的是一种不好的做法,还是没有真正被人们讨论过?因为我试图找到一些代码约定,这些约定会在某些变量/类的函数调用中推荐这样的缩进。

对我来说,上面的代码比没有代码更具可读性:

List<Dog> dogs = new ArrayList<>();
dogs.add(new Dog(1));
dogs.add(new Dog(2));
dogs.add(new Dog(3));
dogs.add(new Dog(4));
dogs.add(new Dog(5));
System.out.println("list of dogs: " + dogs);
Cat cat1 = new Cat(1);
cat.meow();
cat.startsRunningFrom(dogs);
Dog d1 = dogs.get(1);
d1.catches(cat1);

我的缩进提供了与变量声明和其他函数操作的明确分离,以及对变量的以下紧密相关的操作。

任何人都可以评论为什么这是一个不好的做法,或者它是否在提供的代码之外(在List操作之外)通常是可接受的。

3 个答案:

答案 0 :(得分:2)

  

这些在代码约定中真的是一种不好的做法,还是没有真正被人们讨论过?

嗯,这取决于!如果您正在开源,那么您必须坚持使用这些指南。除非你的同伴对它很好,否则没有什么比坏/好。

事实上,我团队中的所有人都使用代码格式化程序,并为评论和空白等设置了预定义的规则。我们尝试遵循相同的规则,以便在发现差异时很容易将代码合并回主存储库。

另一件事是,我已经习惯于看到普遍接受的惯例,下面的代码片段欺骗我假设一个块的开始和结束。

List<Dog> dogs = new ArrayList<>();
----> dogs.add(new Dog(1));
      dogs.add(new Dog(2));
      dogs.add(new Dog(3));
      dogs.add(new Dog(4));
      dogs.add(new Dog(5)); <----
System.out.println("list of dogs: " + dogs);

使用此类约定没有任何害处,但正如我之前所说,它应该被您所在环境中的同行所接受。

答案 1 :(得分:2)

我很欣赏你的想法,而且我不认为你所做的事情本来就有什么坏处。但事实是,在多个开发人员将使用相同代码的组织中,拥有一致的样式规则非常重要。确切的规则因组织而异,或者组织内的团队(我工作的地方,不同的团队可能会采用不同的风格,尽管胜利的根本不同)。但是当涉及缩进,间距,开始新线等的事情时,一致风格的好处通常会超过您可能通过对您来说更合乎逻辑的方式获得的任何好处。我有时候不喜欢强加给我的风格选择,但在这样的事情上,它不值得争论。但是,如果你是一个团队,你可以试着说服他们在这种情况下你的风格更好。然而,按照自己的方式进行操作的一个缺点是可以将一组更简单的规则编程到IDE中,然后根据您团队的风格自动分配内容。

在这种情况下,如果您尝试使用缩进来表示一起使用的某些代码块,我建议您将它们移动到自己的帮助方法中吗?这将完成我认为你想要做的事情。

此外,如果您有一个列表并向其中添加了多个项目,您应该查看Google Guava,它有一些方法可以设置一个带有可变数量参数的调用的列表(例如Lists class中的newArrayList

答案 2 :(得分:1)

这有点意见/由团队自行决定。但是,我同意你的缩进比没有缩进更好。我认为两者都不是最好的解决方案。怎么样:

List<Dog> dogs = initializeDogs();
System.out.println("list of dogs: " + dogs);
initializeCat(dogs);
Dog d1 = dogs.get(1);
d1.catches(cat1);

然后声明帮助方法来做你需要的事情:

private ArrayList<Dog> initializeDogs() {
 ArrayList<Dog> dogs = new ArrayList<>();
 dogs.add(new Dog(1));
 dogs.add(new Dog(2));
 dogs.add(new Dog(3));
 dogs.add(new Dog(4));
 dogs.add(new Dog(5));
 return dogs;
}

private void initializeCat(List<Dog> dogs) {
 Cat cat1 = new Cat(1);
 cat.meow();
 cat.startsRunningFrom(dogs);
}

关键是如果使用最佳实践封装方法,则可能不需要缩进约定。