繁体   English   中英

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

[英]Benefits (and drawbacks) of C# nested method calls

在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#编程社区中更容易接受。 任何见解都会非常感激。 谢谢!

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

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

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

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

  1. 就像你提到的那样,它更容易阅读,因此如果您的代码被传递,或者如果您在一段时间后重新访问它,您可以快速了解正在发生的事情。
  2. 您可以制作可在任何地方重复使用的代码。 这可以减少大型项目的编码时间
  3. 它使调试更容易,因为您可以更快地隔离问题。

当然有更多的开销,但至于速度和内存,我还没有测试过,但我相信你可能会失去一些。 虽然考虑到人们今天运行的计算机类型,但我不认为它是显而易见的。

我已经做了很多小项目,我只是尽快抛出代码,但是一旦我开始取得进展或者我的程序开始变得有点复杂,我总是回过头来重新组织所有方法。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM