2013-02-26 22 views
3

在C#中,我深入Objective-C中的代碼。我想知道,在C#中,用嵌套方法調用編寫代碼有什麼特別的好處或缺點,就性能,內存開銷和代碼可讀性而言?還是更容易閱讀和/或更容易遵循代碼,超越任何可能的速度或內存優勢(內存優勢部分可以是ObjC /非託管代碼說話)?C#嵌套方法調用的好處(和缺陷)

例(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#編程社區。任何有識之士將不勝感激。謝謝!

+2

使用三個本地'int'變量很便宜。而且,第二個版本無論如何都會使用臨時變量。第二個版本非常難以遵循。第一個版本幾乎適用於所有重要方面。 – 2013-02-26 04:20:30

回答

2

如果someMethod(w,t,e)做了一些不平凡的事情,那麼調用它三次將比進行一次調用並存儲結果慢。

請注意,只有在函數someMethod(w,t,e)是一個「純」函數時,這兩個表達式纔是等價的,這意味着它沒有副作用,並且它爲同一組參數返回相同的值。

在最初的設計和編碼過程中,您應該努力獲得最佳的可讀性。考慮到在分析之前方法調用的開銷是過早的優化。

+0

+1對'someMethod'調用的副作用發表評論。 – 2013-02-26 04:28:42

+0

感謝您的洞察力。我沒有想到每個函數調用都有不同的結果。好點子。 – RabbitEar 2013-02-26 04:32:21

0

可讀性幾乎總是更好。查看一本名爲Clean Coding的書。在您的示例中,一旦代碼生成,將會使用0個額外的內存。

+0

感謝您的建議;我一定會檢查出來的。 – RabbitEar 2013-02-26 04:29:45

2

由於多種原因,將所有內容分成不同的方法是很好的編碼實踐。

  1. 就像你提到的它更容易閱讀,因此,如果您的代碼永遠傳遞下去,或者如果你一段時間後再次訪問它,你可以很快明白髮生了什麼。
  2. 您可以製作可在任何地方重複使用的代碼。這可以減少較大項目中的編碼時間
  3. 它使調試更容易,因爲您可以更快地隔離問題。

當然還有更多的開銷,但至於速度和內存方面,我從未測試過它,但我相信你可能會失去一點點。雖然考慮到人們今天運行的計算機的種類,但我不認爲它很明顯。

我已經做了很多小項目,我儘可能快地拋出代碼,但是一旦我開始取得進展或者我的程序開始變得有點複雜,我總是會回去重新組織一切進入方法。

它使一切簡單,乾淨,可讀。