C#嵌套方法调用的好处(和缺点)

时间:2013-02-26 04:17:39

标签: c# methods nested

在Objective-C深入研究之后,我开始重新使用C#进行编码。我想知道,在C#中,在性能,内存开销和代码可读性方面,使用嵌套方法调用编写代码有任何特殊的好处或缺点。保养?或者更容易阅读和/或更容易遵循代码,超过任何可能的速度或内存优势(内存优势部分可以是ObjC /非托管代码说话)?

示例(x,y,z,w,t,e& g都是int):

// non-nested
// someMethod returns an int

int b = someMethod(w,t,e);
int a = ((x + y) * b);
int c = a + (b * g);
return a + b + c;


// nested
// someMethod returns an int
return (((x + y) * someMethod(w,t,e)))
+ (someMethod(w,t,e)) + (((x + y) * someMethod(w,t,e))
+ (someMethod(w,t,e) * g));

遵循非嵌套代码更容易,但在嵌套代码中,您不必实例化三个变量;它也是一行代码的四行代码(虽然为了便于阅读,一行分为三行)。我只是不确定哪种方式更好,或者在C#编程社区中更容易接受。任何见解都会非常感激。谢谢!

3 个答案:

答案 0 :(得分:3)

如果someMethod(w,t,e)做了一些非常重要的事情,那么调用它三次将比进行一次调用并存储结果要慢。

请注意,只有当函数someMethod(w,t,e)是一个“纯”函数时,这两个表达式才是等价的,这意味着它没有副作用,并且它为同一组参数返回相同的值。 / p>

在初始设计和编码过程中,您应该努力获得最佳的可读性。在分析之前考虑方法调用的开销是不成熟的优化。

答案 1 :(得分:2)

出于多种原因,将所有内容分成不同的方法是一种很好的编码实践。

  1. 就像你提到的那样,它更容易阅读,因此如果您的代码被传递,或者如果您在一段时间后重新访问它,您可以快速了解正在发生的事情。
  2. 您可以制作可在任何地方重复使用的代码。这可以减少大型项目的编码时间
  3. 它使调试更容易,因为您可以更快地隔离问题。
  4. 当然有更多的开销,但至于速度和内存,我还没有测试过,但我相信你可能会失去一些。虽然考虑到人们今天运行的计算机类型,但我不认为它是显而易见的。

    我已经做了很多小项目,我只是尽快丢弃代码,但是一旦我开始取得进展或者我的程序开始变得有点复杂,我总是回去重新整理所有内容。方法

    它使一切变得简单,干净和可读。

答案 2 :(得分:0)

可读性几乎总是更好。查看一本名为Clean Coding的书。在您的示例中,一旦构建代码,将使用0个额外的内存。