六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 31|回复: 0

避免重复代码——know your library

[复制链接]

升级  30.2%

203

主题

203

主题

203

主题

进士

Rank: 4

积分
651
 楼主| 发表于 2013-1-27 05:28:46 | 显示全部楼层 |阅读模式
いや、这篇只是个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. 嗯这篇就是吐槽……正在读的这代码里的重复逻辑太多了!
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表