将函数作为参数传递与设置变量并传递它
Pass function as parameters vs setting a variable and passing it
我敢打赌这个问题以前有人问过,但我真的找不到我要找的东西,所以提前打扰一下:)
这两者之间有区别吗(从编程上讲或从开销上讲):
var data = GetProducts();
GetAllData(data);
还有这个:
GetAllData(GetProducts());
这两种方法的优缺点是什么?是否有更多 elegant/right 的实现方式(比如 Func<>)?
提前致谢,
罗腾
分两行进行调试更容易,因为您可以在第二行中断并观察第一行分配的值。
无论如何,编译器都会将它们优化成同一个CIL,所以这不是效率问题。这完全取决于偏好。
没有功能差异,当代码被翻译成机器语言(或 JVM 字节码或其他)时,它会产生或多或少相同的低级代码。
主要区别在于 (a) 美学和 (b) 代码的可维护性。关于美学,有些人可能会争辩说第二种形式更漂亮。这在很大程度上是个人选择,但我认为如果表达式不像 GetProducts()
那样简单但很长(例如 GetContext().GetProductService().GetProductsFor(GetContext().GetCurrentUser())
然后用中间变量将其分成两行更具可读性。
关于可维护性,我想你会发现变量越少越有利于以后的维护。您不太可能遇到与副作用或改变假设相关的错误。在其他语言中,您可以使用 const
或 final
等结构来使用编译器来帮助防止代码腐烂,但我仍然认为代码行越少越干净。
希望对您有所帮助!
我敢打赌这个问题以前有人问过,但我真的找不到我要找的东西,所以提前打扰一下:)
这两者之间有区别吗(从编程上讲或从开销上讲):
var data = GetProducts();
GetAllData(data);
还有这个:
GetAllData(GetProducts());
这两种方法的优缺点是什么?是否有更多 elegant/right 的实现方式(比如 Func<>)?
提前致谢, 罗腾
分两行进行调试更容易,因为您可以在第二行中断并观察第一行分配的值。
无论如何,编译器都会将它们优化成同一个CIL,所以这不是效率问题。这完全取决于偏好。
没有功能差异,当代码被翻译成机器语言(或 JVM 字节码或其他)时,它会产生或多或少相同的低级代码。
主要区别在于 (a) 美学和 (b) 代码的可维护性。关于美学,有些人可能会争辩说第二种形式更漂亮。这在很大程度上是个人选择,但我认为如果表达式不像 GetProducts()
那样简单但很长(例如 GetContext().GetProductService().GetProductsFor(GetContext().GetCurrentUser())
然后用中间变量将其分成两行更具可读性。
关于可维护性,我想你会发现变量越少越有利于以后的维护。您不太可能遇到与副作用或改变假设相关的错误。在其他语言中,您可以使用 const
或 final
等结构来使用编译器来帮助防止代码腐烂,但我仍然认为代码行越少越干净。
希望对您有所帮助!