Declaring an object to return vs direct return statements C#
嘿,我刚遇到一个函数,我很困惑,哪一个更好?
1 2 3 4 5 6 7 8 9
| private static bool IsEqual(TypeABC output, TypeABC input)
{
if( conditions....)
{
return true;
}
return false;
} |
或
1 2 3 4 5 6 7 8 9 10 11
| private static bool IsEqual(TypeABC output, TypeABC input)
{
bool isEqual = false;
if( conditions....)
{
isEqual = true;
}
return isEqual;
} |
两人都做同样的事,但是
我想从任何角度了解它可能是编码标准、性能或垃圾收集。上面哪一个更好?为什么?
或者,如果它太通用而无法回答,那么每种代码的优点/缺点都要优于其他代码。
还建议我为这个问题贴上几个标签。
- "哪个更好"—这不是解决此类问题的方法。列出两种方法的优缺点,并决定哪些优缺点你觉得重要。然后你可以选择哪个更好。关键词做更多的研究:单入口,单出口和快速失败,也见C返回变量。
- 我认为单入口单出口是过程编程语言(如Pascal)的遗留问题,在这种语言中,很难控制何时返回函数/方法中的结果。我在这里找到了一些pascal函数en.wikibooks.org/wiki/pascal_programming/syntax_and_function‌&8203;s,这很奇怪(imo),因为没有返回关键字来停止函数。
在性能或垃圾收集方面,这是一个非常无用的问题,因为您假设C编译器团队不只是将代码重新编译为IL版本:
1 2 3 4
| private static bool IsEqual(TypeABC output, TypeABC input)
{
return ( conditions....);
} |
- Erik,您的代码是所有3个代码中最好的一个,是的,我对如何在这两个代码中优化代码感到困惑,有没有什么地方可以看到代码的IL版本?
- 没有意义。你试图超级优化的时间几乎没有任何回报。作为一个开发者,我们应该在C中处理更大的问题。
- 我理解你所说的,但是我仍然想在把代码留给编译器之前尽我最大的努力优化我的代码,我不认为这是毫无意义的,因为我不相信在不知道幕后发生了什么的情况下工作。不管怎样,谢谢,因为我能找到答案和背后的原因
- 编译器——每个程序员都应该知道的关于编译器优化的知识。与手动优化代码相比,您应该考虑设计的各个方面,例如使用更快的算法、合并线程级别的并行性以及使用框架特定的特性(例如使用移动构造函数)。不过,使用编译器提供的特定功能并让编译器调整代码,通常比手动调整程序花费的时间更有成效。
- .NET 4.5.1运行时可以做一些非常疯狂的事情…例如,在运行时,Ryujit可能能够确定if语句的条件在应用程序的这个特定运行中从来不是真的,因此,它可以被优化掉。
- 好东西,谢谢埃里克:)。