Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可读性a=b=c或a=c;b=c;?_C#_C++ - Fatal编程技术网

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/b/c/d)被初始化为同一事物的概念,即它们是相关的
  • 但是,请注意:

  • 如果a/b/c/d不相关(只是碰巧初始化为1),则不要这样做。这样会降低代码的可读性。例如:

    a=c=1;//Foo功能相关

    b=d=1;//与条码功能相关的

  • 这样的链式分配会降低将来为变量分配不同初始值的灵活性,因为这样您就必须再次将它们分解

  • 尽管如此,我个人的建议是将与概念/用法相关的变量的赋值链接起来。在实际操作中,更改作业的需求通常不会经常出现,因此警告2通常不会造成问题


    编辑:我的建议可能与已发布的指南相抵触。请看评论。

    我想这是一个最具可读性的观点问题。(显然是这样……否则你就不会问了。)

    但是Oracle明确表示要使用单独的分配语句:

    10.4可变分配。“避免在一条语句中将多个变量赋给同一个值。这很难读取。”

    我的意见

  • 即使你不喜欢,也要遵循项目规定/约定的风格规则1
  • 如果您的项目(尚未)没有规定/约定的样式规则:
    • 试着说服其他成员采用最广泛使用的风格规则
    • 如果你不能说服他们/达成共识,那么就对你为项目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
    vs
    b=0
    只在一些变量是易变的情况下才起作用,我要说的主要一点是
    c
    a
    之前被赋值,尽管这同样应该
    a = 0;
    b = 0;
    c = 0;