`
RednaxelaFX
  • 浏览: 3047476 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

避免重复代码——know your library

    博客分类:
  • .NET
阅读更多
いや、这篇只是个rant……
好吧我要好好说中文。思维进入混乱模式了(T T

刚才在读一段代码的时候看到了一个不怎么有趣的方法:
/// <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里有充分的工具方法来处理对象转换到字符串的问题以及伴随的格式化问题。
最常见的应用场景之一应该是控制台输出吧,像是:
System.Console.WriteLine("{0}=0x{0:X}", anIntVariable);

这里用的到了IFormatProvider规定的一些功能。
更直接的,Int32和Int64之类的类型本身就实现了IFormattable接口,所以我们可以把前面我说无趣的方法改成:
private string GetExpandedOffset( long offset ) {
    return offset.ToString( "D4" );
}

一句解决。

这例子本身很简单,不过有一个问题就是,在不熟悉自己所使用的库的时候,很可能会写出类似的重复代码。如果能有什么自动的方法检查出这些重复的代码就好了。不过当前到底有什么分析工具能把像上面的“功能不完整”的重复代码抓出来呢?

在那样强悍的工具出现前,咱们还是自己好好认识清楚自己用的库吧~
微软的Phoenix编译器框架确实非常的强悍,但是能不能检测出这样的重复代码我还没试来看看……

P.S. 嗯这篇就是吐槽……正在读的这代码里的重复逻辑太多了!
分享到:
评论
1 楼 RednaxelaFX 2008-11-08  
说来,最近在读的一些代码里看到new Type[ 0 ]这样的东西。这也是属于没有know your library才会这样写。Type.EmptyTypes就是一个专门用来表示new Type[ 0 ]的静态只读域,没必要每次都分配一个空数组出来……

相关推荐

Global site tag (gtag.js) - Google Analytics