避免重複代碼——know your library

來源:互聯網
上載者:User

剛才在讀一段代碼的時候看到了一個不怎麼有趣的方法:

C#代碼

/// <summary>/// Add enough zeros to a number as to be represented on 4 characters/// </summary>/// <param name="offset">/// The number that must be represented on 4 characters/// </param>/// <returns>/// </returns>private string GetExpandedOffset( long offset ) {    string result = offset.ToString( );    for ( int i = 0; result.Length < 4; i++ ) {        result = "0" + result;    }    return result;}

方法有注釋。方法體也就幾行。問題是什麼呢?且不提這方法在迴圈中使用了String的+=運算子而產生了很多無用對象……

問題是——這明顯就是重複勞動。.NET Framework裡的BCL裡有充分的工具方法來處理對象轉換到字串的問題以及伴隨的格式化問題。

最常見的應用情境之一應該是控制台輸出吧,像是:

C#代碼

System.Console.WriteLine("{0}=0x{0:X}", anIntVariable);

這裡用的到了IFormatProvider規定的一些功能。

更直接的,Int32和Int64之類的類型本身就實現了IFormattable介面,所以我們可以把前面我說無趣的方法改成:

C#代碼

private string GetExpandedOffset( long offset ) {
return offset.ToString( "D4" ); }

一句解決。

這例子本身很簡單,不過有一個問題就是,在不熟悉自己所使用的庫的時候,很可能會寫出類似的重複代碼。如果能有什麼自動的方法檢查出這些重複的代碼就好了。不過當前到底有什麼分析工具能把像上面的“功能不完整”的重複代碼抓出來呢?

在那樣強悍的工具出現前,咱們還是自己好好認識清楚自己用的庫吧~

微軟的Phoenix編譯器架構確實非常的強悍,但是能不能檢測出這樣的重複代碼我還沒試來看看……

P.S. 嗯這篇就是吐槽……正在讀的這代碼裡的重複邏輯太多了!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.