我想这个:
public static string abc()
{
return "abc";
}
最好以这种方式调用此函数:
string call = abc();
Console.writeline(call);
比这个?
console.writeline(abc());
有没有理由更喜欢一个到另一个?
答案 0 :(得分:2)
两者都有效。但是,根据经验,我得出的结论是,第一种选择更适合于可读性和易维护性。我无法计算有多少次我从“紧凑”样式更改为第一个样式作为调试会话的帮助。
例如,这种样式可以很容易地检查中间结果的正确性:
string call = abc();
assert(!call.empty()); // Just an example.
Console.writeline(call);
此外,稍后有助于使代码更加健壮,在检查调用值的后续操作之前添加条件检查,例如,如果设计不保证先前断言的条件成立,但仍需要检查它
string call = abc();
if (!call.empty())
{
Console.writeline(call);
}
另请注意,使用此样式,您可以轻松检查调试器中call
的值。
答案 1 :(得分:1)
鉴于您的确切示例(一个参数,其他地方未使用的值,没有副作用),这只是风格问题。但是,如果有多个参数并且方法有副作用,它会变得更有趣。例如:
int counter;
int Inc() { counter += 1; return counter }
void Foo(int a, int b) { Console.WriteLine(a + " " + b); }
void Bar()
{
Foo(Inc(), Inc());
}
您希望Foo
在此处打印什么?根据语言,甚至可能没有可预测的结果。在这种情况下,首先将值赋给变量应该使编译器(取决于语言)以可预测的顺序评估调用。
答案 2 :(得分:0)
实际上,如果您没有任何错误检查,我看不出有什么区别。
这会有所作为
string call = abc();
# if call is not empty
{
Console.writeline(call);
}
上述方法可以避免写入空字符串。