可读性a = b = c或a = c; B = C;?

时间:2011-03-21 02:12:02

标签: 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";
}

void init()
{
  a=1;
  b=1;
  c=1;
  d=1;
  s = "abc";
}

类中字符串的原因是可能存在其他相同类型的组的提示,当然,类可能会随着需求的变化而增长

编辑:在这个问题走得太远之前,这个问题的意图很简单: 在Effective C ++第12项中(首选初始化到构造函数中的赋值),Scott使用链赋值而不是a = c; B = C;我确定他知道什么时候使用什么,但我也记得我读过的书也建议使用int a; int b;在类似的作业情况下。在我的程序中我有一个类似的情况,需要初始化一组相关的单个内置类型,我发现通过使链分配确实使它更容易阅读,特别是如果类有许多其他不同类型的实例变量。它似乎与我读过的书和我的记忆相矛盾,因此这个问题。

3 个答案:

答案 0 :(得分:39)

我碰巧更喜欢链式版本,但这完全是一个偏好问题。

但请注意

a = b = c = 0;

相当于:

c = 0;
b = c;
a = b;

而不是

a = 0;
b = 0;
c = 0;

(并不是说首先要进行哪项分配对你来说很重要)

答案 1 :(得分:26)

我个人的偏好是a=b=c=d,原因如下:

  1. 简洁,节省行
  2. 它传达了(a / b / c / d)被初始化为同样的东西的概念,它们是相关的
  3. 但是,请注意:

    1. 如果a / b / c / d不相关(并恰好初始化为1),请不要这样做。您将降低代码的可读性。例如:

      a=c=1; // Foo-function related

      b=d=1; // Bar-function related

    2. 这样的链接分配会降低您将来为变量分配不同初始值的灵活性 - 因为那时您将不得不再次将它们分解。

    3. 尽管如此,我个人的建议是在概念/用途上对相关的变量进行链接分配。在实际操作中,改变作业的需要通常不会经常出现,所以警告#2通常不会造成问题。

      编辑:我的建议可能违反已发布的指南。见评论。

答案 2 :(得分:6)

我想这是一个最具可读性的意见问题。 (显然是这样......否则你不会问。)

然而,Oracle的"Code Conventions for the Java TM Programming Language"明确表示要使用单独的赋值语句:

  

10.4变量分配。 “避免在单个语句中将多个变量分配给相同的值。很难阅读。”

我的意见?

  1. 遵循您项目的规定/约定的样式规则,即使您不喜欢它们 1
  2. 如果您的项目(尚未)已订明/约定的样式规则:
    • 尝试说服其他成员采用最广泛使用的适用的样式规则。
    • 如果你无法说服他们/达成共识,那么就非正式地为你为项目 1 编写的主要代码块。

  3. 1 ......或者离开。