在其他函数参数中调用函数好吗?

时间:2013-05-23 09:29:41

标签: string function parameters

我想这个:

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

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

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

比这个?

console.writeline(abc());

有没有理由更喜欢一个到另一个?

3 个答案:

答案 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);
}

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