3

在深入了解 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# 编程社区中更受欢迎。任何见解将不胜感激。谢谢!

4

3 回答 3

3

如果someMethod(w,t,e)做了一些不平凡的事情,调用它 3 次将比单次调用并存储结果要慢。

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

在最初的设计和编码过程中,您应该争取最好的可读性。在分析之前考虑方法调用的开销是一种过早的优化。

于 2013-02-26T04:25:47.743 回答
2

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

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

当然会有更多的开销,但至于速度和内存,我从未测试过它,但我相信你可能会失去一点。尽管考虑到人们今天正在运行的计算机类型,但我认为它并不引人注目。

我做过很多小项目,我只是尽可能快地扔掉代码,但是一旦我开始取得进展或者我的程序开始变得有点复杂,我总是回去把所有东西重新组织成方法。

它使一切保持简单、干净和可读。

于 2013-02-26T04:34:20.993 回答
0

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

于 2013-02-26T04:25:47.900 回答