在声明中使用多个赋值是否有任何优点或缺点?在简单的例子中
var1 = var2 = true;
这个分配是从右到左(我相信C#中的所有分配,可能是Java,虽然我没有检查过后者)。但是这样编码是否有任何影响(编译,执行或其他方面)?
干杯。
答案 0 :(得分:11)
可读性失败 这真的不需要花费更多的东西
var1 = true;
var2 = true;
或
var2 = true;
var1 = var2;
答案 1 :(得分:4)
没有任何编译或执行方面的影响,但我个人不会这样做。
使用两个单独的赋值语句更易读/可维护,并且将编译为与单个语句完全相同的IL。
bool var1 = true;
bool var2 = true;
// versus
bool var2;
bool var1 = var2 = true;
// or
bool var1 = true, var2 = true;
答案 2 :(得分:4)
我认为我是唯一一个喜欢它的人...也许不是两个变量,但如果你喜欢5,你只是初始化它们,为什么不呢?可以更轻松地一次更改所有内容。关于var1=true; var2=var1;
的这些建议需要更多的思考才能理解。要确定var2
实际初始化的内容,您必须查看var1
,然后查看分配给它的内容。我认为将它们全部放在一条线上非常清楚。
如果你正在做其他事情而不是初始化它们(执行一些有意义的逻辑)那么最好明确你正在做什么(让它们在不同的行上)。
答案 3 :(得分:2)
如果您将其编写为:
,则人类更容易解析bool var1 = true;
bool var2 = true;
但在我看来更重要的是,对于需要比较运算符而不是赋值运算符的错误,这是不明确的。最好明确一点。对于var1的值,以下2个块具有相反的结果:
bool var2;
bool var1 = var2 = false;
与
bool var2;
bool var1 = var2 == false;
答案 4 :(得分:1)
我最近使用了在代码高尔夫中链接分配的功能,目标是尽可能少的字符。
在此之前我不认为我曾经在C#中使用过它,因为它使代码的可读性降低。要理解你必须从右到左阅读它的陈述,那不是你自然地阅读代码的方式。
正如Anders Rune Jensen所提到的,你可能想要强调变量中的值应该是相同的,但是你可以在两个语句中做到这一点,以使它更清晰:
var1 = true;
var2 = var1;
如果实际生成的代码完全不同,那么在正常情况下,性能差异根本不会或太小而无法衡量。
答案 5 :(得分:1)
我每次都要考虑可读性,但确切地说,最具可读性的是意见问题,取决于背景。对于引用的两个变量,我将使用单独的行,如
var1 = true;
var2 = true;
但另一方面,对于更多变量,我通常会使用更长的任务来节省屏幕空间。例如,编码图形对于坐标具有简单的x,y,s和t变量是很常见的。在这种情况下,我会毫不犹豫地选择
x = y = s = t = 0;
因为3行屏幕空间的丢失会影响可读性。坦率地说,虽然简单是首选,如果你不能理解上面的构造,你首先编写的基于C语法的编码是另一个伟大的节省空间,三元构造,将完全打败你。
a =(x == y)? value1:value2;
答案 6 :(得分:1)
以类似的方式,考虑:
var var1, var2;
var1 = var2 = new int[3];
var1 = {1, 1, 1};
var2 = {2, 2, 2};
var1和var2现在指向相同的引用{2,2,2}。
当var1和var2是引用类型(如数组)时,请记住,即使数组的元素是值类型(如int),该数组仍然是引用类型。
答案 7 :(得分:0)
它只是将东西放入一行而不是多行。并且还清楚地表明您实际上希望var1和var2具有相同的值。
var1 = true;
var2 = true;
可能看起来像c / p错误; - )
答案 8 :(得分:0)
这种符号对于“Code-golf”非常有用:)
// 34 symbols
bool var1 = true;
bool var2 = true;
// versus 27 symbols
bool var2;
bool var1=var2=1;
// vs 22 symbols
bool var1,var2=var1=1;
答案 9 :(得分:0)
一组有趣的回复,谢谢。我以为我会总结一下(这是允许的吗?)
我认为,在声明简单变量的初始值时,也许可以接受,但不是许多人的偏好。但大多数人都认为可读性更为重要;他们的偏好是单独的陈述。我的一样。
我刚才做了另一个谷歌,发现有人在.Net 1.1中测试了"Performance and Multiple Assigment in C#"。似乎有一个非常小的打击。看一看。