为什么在一行上声明变量是不好的做法?
例如
private String var1, var2, var3
代替:
private String var1;
private String var2;
private String var3;
为什么在一行上声明变量是不好的做法?
例如
private String var1, var2, var3
代替:
private String var1;
private String var2;
private String var3;
在我看来,将每个变量放在单独的行上的主要目标是促进版本控制工具的工作。
如果多个变量在同一行,则可能会因不同开发人员的不相关修改而发生冲突。
在 C++ 中:
int * i, j;
i 是 int * 类型,j 是 int 类型。这种区别太容易被忽略了。
除了将它们放在一行之外,以后可以更轻松地添加一些评论
我认为有多种原因,但都归结为第一个原因是可读性较差且更容易失败,因为一行代码在做不止一件事。
所有这一切都没有真正的收获,难道你不告诉我你发现两行节省的空间是真正的收获。
这与您拥有时发生的事情类似
if ((foo = some_function()) == 0) {
//do something
}
当然,这个例子比你的要糟糕得多。
在 C/C++ 中,您还有一个问题,即用于指示指针类型的 * 仅适用于紧随其后的标识符。因此,没有经验的开发人员的一个相当常见的错误是编写
int* var1, var2, var3;
并期望所有三个变量都是“int指针”类型,而对于编译器来说,这读作
int* var1;
int var2;
int var3;
仅使 var1 成为指针。
使用单独的行,您有机会在描述变量使用的每一行上添加注释(如果从名称中不清楚)。
因为在某些语言中,示例中的 var2 和 var3不是字符串,它们将是变体(无类型)。
为什么这是不好的做法?只要您的代码仍然可读,我认为不是。
//not much use
int i, j, k;
//better
int counter,
childCounter,
percentComplete;
老实说,我并不反对。我认为将类似的变量分组在同一行上是完全可行的,例如
浮动 fMin, fMax;
但是,当变量不相关时,我会避开,例如
int iBalance, iColor;
关联。
仅仅因为两个变量是 String 类型并不意味着它们彼此密切相关。
如果两个(或更多)变量通过函数而不是变量类型密切相关,那么也许它们可以一起声明。即,只有当您的程序的读者可以同时看到这两个变量时,才应该将它们实际放在一起
以下是我的理由:
情况如何,例如:
public static final int NORTH = 0,
EAST = 1,
SOUTH = 2,
WEST = 3;
这也被认为是不好的做法吗?我认为这可以,因为它反驳了之前提出的一些观点:
所以在一个(尽管代码很臭)的例子中,你有理由不这样做吗?
同意 edg,也因为将每个变量放在单独的行上更具可读性和易于维护。您会立即看到类型、范围和其他修饰符,并且当您更改修饰符时,它仅适用于您想要的变量 - 这样可以避免错误。
当您可以并且想要在减速时初始化变量时,这是一种不好的做法。这可能不是那么糟糕的一个例子是:
string a,b;
if (Foo())
{
a = "Something";
b = "Something else";
}
else
{
a = "Some other thing";
b = "Out of examples";
}
一般来说,出于其他人讨论的版本控制和评论原因,我会在 95% 的情况下应用它。但是在某些情况下它确实有意义,例如,如果我正在编写图形并且我想要几个变量来表示纹理坐标(通常按约定引用为 s 和 t),那么将它们声明为
整数 s, t; // 纹理坐标
恕我直言,通过缩短代码和明确这两个变量属于一起来增强代码的可读性(当然有些人会主张在这种情况下使用单点类变量)。
在尝试这个问题时https://www.interviewbit.com/problems/remove-element-from-array/
方法 1 给出了超出此代码的内存限制:
类型 1:
int i,j;
类型 2:
int i;
int j;
类型 1:超出内存限制
int removeElement (int* A, int n1, int B)
{
int k=0, i;
for(i=0;i<n1;i++)
if(A[i]!=B)
{
A[k]=A[i];
k++;
}
return k;
}
而类型 2 工作得很好
int removeElement (int* A, int n1, int B)
{
int k=0;
int i;
for(i=0;i<n1;i++)
if(A[i]!=B)
{
A[k]=A[i];
k++;
}
return k;
}