1

我想这是:

public static string abc()
{
    return "abc";
}

最好以这种方式调用此函数:

string call = abc();
Console.writeline(call);

比这个?

console.writeline(abc());

有什么理由更喜欢其中一个吗?

4

3 回答 3

2

两者都是有效的。但是,根据经验,我得出的结论是,第一个选项更适合可读性和易于维护。我数不清有多少次我从“紧凑”样式更改为第一个样式作为调试会话的帮助。

例如,这种风格可以很容易地检查中间结果的正确性:

string call = abc();
assert(!call.empty()); // Just an example.
Console.writeline(call);

此外,它有助于使代码在以后更加健壮,在检查调用值的后续操作之前添加条件检查,例如,如果设计不保证前一个断言的条件成立但您仍然需要检查它。

string call = abc();
if (!call.empty())
{
    Console.writeline(call);
}

另请注意,使用这种样式,您将能够轻松地检查call调试器中的值。

于 2013-05-23T09:36:42.813 回答
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在这里打印什么?根据语言的不同,甚至可能没有可预测的结果。在这种情况下,首先将值分配给变量应该会导致编译器(取决于语言)以可预测的顺序评估调用。

于 2013-05-23T09:43:58.737 回答
0

实际上,如果您没有任何错误检查,我看不出有什么区别。

这会有所作为

string call = abc();
# if call is not empty
{
    Console.writeline(call);
}

上述方法可以避免写入空字符串。

于 2013-05-23T09:32:39.730 回答