为什么不在同一行上声明几个相同类型的变量?

时间:2020-03-06 14:25:14  来源:igfitidea点击:

为什么在一行上声明变量是不好的做法?

例如

private String var1, var2, var3

代替:

private String var1;
private String var2;
private String var3;

解决方案

因为在某些语言中,示例中的var2和var3不会是字符串,所以它们将是变体(无类型)。

我认为,将每个变量放在单独的行上的主要目标是简化版本控制工具的工作。

如果多个变量在同一行上,则可能会因不同开发人员进行不相关的修改而产生冲突。

同意edg,也因为将每个变量放在单独的行上更易于阅读和维护。我们会立即看到类型,作用域和其他修饰符,当我们更改修饰符时,它仅适用于想要避免错误的变量。

在单独的行中,我们可以在每行中添加描述该变量使用的注释(如果不清楚其名称)。

这是我的原因:

  • 可读性强,如果我们知道每行只有一个,则更容易发现
  • 版本控制,行内更改更少,单行增加,更改或者删除更多,易于从一个分支合并到另一个分支

在C ++中:

int * i, j;

i是int *类型,j是int类型。
区别太容易错过了。

除了将它们放在一行上之外,以后再添加一些评论也变得更加容易

我认为有多种原因,但是它们全都归结为第一个原因是可读性较低,并且更容易出错,因为单行所做的不只是一件事情。

所有这些都没有真正的收益,而且我们也不告诉我我们发现两行节省的空间是真正的收益。

这与当你有

if ((foo = some_function()) == 0) {
    //do something
}

当然,这个例子比你的例子差得多。

老实说,我并不反对。我认为将相同变量分组在同一行上是完全可行的,例如

浮动fMin,fMax;

但是我避开了变量不相关的时间,例如

int iBalance,iColor;

  • 在使用版本控制工具(由Michel发现)时对我们更明显
  • 当我们有最简单的上溢/下溢或者编译错误并且眼睛无法指出明显的
  • 捍卫相反的观点(即多变量单行声明)的优点较少("代码文本垂直可见性"为单例)

在C / C ++中,还存在一个问题,即用于指示指针类型的*仅适用于紧随其后的标识符。因此,缺乏经验的开发人员经常犯的错误是写

int* var1, var2, var3;

并期望所有三个变量的类型均为" int指针",而对于编译器来说,其读为

int* var1;
int var2;
int var3;

仅使var1成为指针。

那么这种情况呢:

public static final int NORTH = 0,
                        EAST = 1,
                        SOUTH = 2,
                        WEST = 3;

这也被认为是不好的做法吗?我认为还可以,因为它可以抵消之前提出的一些观点:

  • 它们肯定都是同一类型(在我的静态类型Java世界中)
  • 可以为每个添加注释
  • 如果必须更改一个的类型,则可能必须全部更改,而所有四个可以一次更改

因此,在一个(尽管有臭味的代码)示例中,是否有我们不愿意这样做的原因?

在大多数情况下,我们可以并且想在减速度上初始化变量时,这是一种不好的做法。一个可能并不那么糟糕的示例是:

string a,b;
if (Foo())
{
  a = "Something";
  b = "Something else";
}
else
{
  a = "Some other thing";
  b = "Out of examples";
}

为什么这是不好的做法?只要代码仍然可读,我就认为不是。

//not much use
int i, j, k;

//better
int counter, 
    childCounter, 
    percentComplete;

通常,出于其他人讨论的版本控制和注释原因,我将其应用于所有情况的95%。但是在某些情况下它确实有意义,例如,如果我正在编码图形,并且我想要几个变量来表示纹理坐标(通常被惯例称为s和t),然后将它们声明为

int s,t; //纹理坐标

IMHO通过缩短代码并明确表明这两个变量属于同一类来提高代码的可读性(在这种情况下,当然有些人会主张使用单点类变量)。

关联。

仅仅因为两个变量的类型为String并不意味着它们彼此紧密相关。

如果两个(或者多个)变量通过函数(而不是变量类型)密切相关,则可以将它们一起声明。也就是说,只有当程序的读者能够同时看到这两个变量时,才应将它们实际放置在一起