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



我有一个缩进一组函数调用的习惯,如下所示:

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操作之外),这是否是可以接受的。

在代码约定中,这些真的是一种糟糕的做法吗?还是这些还没有被真正讨论过?

好吧,这取决于情况!如果你正在研究开源,那么你必须非常严格地遵守指导方针。没有什么比坏/好更好的了,除非你的同龄人对此很满意。

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

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

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);

使用这样的惯例没有害处,但正如我之前所说,在你工作的环境中,你的同龄人应该接受它。

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

在这种情况下,如果您试图使用缩进来表示组合在一起的某些代码块,我可以建议您将它们移动到自己的helper方法中吗?这将实现我认为你正在努力做的事情。

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

这在某种程度上是一个意见问题/由团队自行决定。然而,我同意你的压痕总比没有压痕好。我认为两者都不是最好的解决方案。这个怎么样:

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);
}

关键是,如果使用最佳实践封装方法,那么缩进约定可能就没有必要了。

最新更新