近期在閱讀代碼時,發現一個「不怎麼有趣」的方法:
/// <summary>
/// 將數字補零至 4 位字符
/// </summary>
private string GetExpandedOffset(long offset) {
string result = offset.ToString();
for (int i = 0; result.Length < 4; i++) {
result = "0" + result;
}
return result;
}
這段代碼存在兩個問題:
+=),產生大量臨時對象,效率低下。最常見的場景是控制台輸出:
System.Console.WriteLine("{0}=0x{0:X}", anIntVariable);
更直接的是,Int32、Int64 等數值類型實作了 IFormattable 介面,可直接使用標準數值格式字符串。上述方法可簡化為單行:
private string GetExpandedOffset(long offset) {
return offset.ToString("D4");
}
"D4" 表示十進位格式,最少 4 位,不足前補零。一行代碼解決問題,且效能遠優於手寫迴圈。
這個例子雖簡單,卻揭示了普遍現象:不熟悉所用類庫,導致寫出大量重複、低效、功能不全的代碼。
在自動化靜態分析工具能精準識別此類「功能性重複代碼」之前,開發者應主動深入掌握日常使用的框架與庫。微軟 Phoenix 編譯器框架雖強大,但能否自動檢測此類問題尚待驗證。
結論:吐槽歸吐槽,認清庫才是正道。