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