C# 可读性a=b=c或a=c;b=c;?
我有一个类,它有一组整数,比如C# 可读性a=b=c或a=c;b=c;?,c#,c++,C#,C++,我有一个类,它有一组整数,比如 foo() { int a; int b; int c; int d; .... string s; } 现在的问题是为了获得最佳可读性,foo()的init()函数应该是这样的 void init() { a=b=c=d=1; //for some reason they are init to 1; s = "abc"; } 或 ? 在类中使用字符串的原因是提示可能存在相同类型的其他组,当然,类可能会随着需求的变化而增长 编
foo()
{
int a;
int b;
int c;
int d;
....
string s;
}
现在的问题是为了获得最佳可读性,foo()的init()函数应该是这样的
void init()
{
a=b=c=d=1; //for some reason they are init to 1;
s = "abc";
}
或
?
在类中使用字符串的原因是提示可能存在相同类型的其他组,当然,类可能会随着需求的变化而增长
编辑:在这个问题走得太远之前,这个问题的意图很简单:
在有效的C++项目12(首选构造函数中的初始化到赋值)中,史葛使用链赋值代替A= C;b=c;我肯定他知道什么时候用什么,但我也记得我读过的书也推荐用int a;int b;在类似的任务情况下。在我的程序中,我遇到了一个类似的情况,一组相关的单个内置类型需要初始化,我发现通过进行链赋值,确实可以更容易地读取,特别是当类有许多其他不同类型的实例变量时。这似乎与我读过的书和我的记忆相矛盾,因此我提出了这个问题。我碰巧更喜欢链式版本,但这完全是偏好的问题 但是,请注意
a = b = c = 0;
相当于:
c = 0;
b = c;
a = b;
而不是
a = 0;
b = 0;
c = 0;
(对你来说,哪项任务先完成并不重要)我个人的偏好是
a=b=c=d
,原因如下:
a=c=1;//Foo功能相关
b=d=1;//与条码功能相关的
编辑:我的建议可能与已发布的指南相抵触。请看评论。我想这是一个最具可读性的观点问题。(显然是这样……否则你就不会问了。) 但是Oracle明确表示要使用单独的分配语句: 10.4可变分配。“避免在一条语句中将多个变量赋给同一个值。这很难读取。” 我的意见
- 试着说服其他成员采用最广泛使用的风格规则
- 如果你不能说服他们/达成共识,那么就对你为项目1编写的主要代码块非正式地这样做
1。。。或者退出。为什么不在构造函数中进行赋值?哪种语言?这三个方面你都没有编程。也许代码<>代码> B>代码> B/<代码>代码> C <代码>和代码> d>代码>应该是数组中的元素。@ Kaleb,因为例如在C++中,初始化构建类型没有任何性能,如果类成员的数量大,那么它将变得难以读取和错误。是在构造函数中调用的吗?@GMan由于某种原因,它们不喜欢在数组中,因此问题是:)也许我选择标记太激进了,但你知道:)@Yuan:是的,它们太激进了,请修复它们。我确实更喜欢a=b=c=d,但我记得当我声明变量时,最好说int a;int b;而不是int a,b;否?我通常在每行声明一个变量,否则一看就不清楚每个变量的类型。然而,链式赋值传递的信息是变量是相关的,这在可读性方面可能是有价值的。为什么保存行是一件好事?清晰是王道。每项作业一行。你不是为了使它紧凑而付费的,你是为了使它易于理解/健壮和可维护。清晰是王道@斯蒂芬·钟:谁推荐作业链?我读过的每一条编码指南都推荐了完全相反的方法(我读了很多)。@Martin,我只是自己提倡。我没有说这是任何标准推荐的。我个人认为,在相关变量上链接赋值比在每行上一个赋值更清晰/易读,因为它传达了一个事实,即这些变量是相关的(或具有类似的用法)。@Stephen Chung:关于killing tress的评论。那只是一个愚蠢的空谈。关于缩短函数/方法,有很多指导原则。在一行中使用多个赋值在更大的上下文中几乎不会有什么不同。在代码清晰度降低的情况下权衡一下,额外的一页纸实际上会花费更多的资源,因为它会花费额外的电力,让终端处理与之相关的调试问题。请参阅我对Ben Voigt问题的评论,了解它为什么会导致问题。如果您对多语言问题做出此类断言,请指定它们对哪种语言有效。我认为在Java中应该是
c=0;b=0;a=0代码>取而代之。(不过,只有在使用可变变量的情况下才能观察到差异。)@Paulo:说得好。我具体列出C++的行为,但我认为其他语言在这个领域保持兼容性。你是对的,b=c
vsb=0
只在一些变量是易变的情况下才起作用,我要说的主要一点是c
在a
之前被赋值,尽管这同样应该
a = 0;
b = 0;
c = 0;