博客园一位微软MVP的文章
http://www.cnblogs.com/asxinyu/p/4383402.html#autoid-0-0-0
摘录:
我这里说的奇葩,并不是脱离三种方式,而是其注释的位置,但是在浏览一段开源的代码的时候,发现了这个注释,当时吃惊,然后是思考,先看看:
上面一段代码包括了前面提到的3种注释方式,红色框里面的就是我说的 奇葩注释,用的是 /* */块方式,写在数组定义的中间,毫无疑问,这肯定是可以运行的。只是以前没想到可以这样,可能局限于自己的思维方式。
根据我的理解,开发人员这样注释的目的,由于这段代码的变量包含的信息量很大,这样写更加直接明了。但是否多余,也可以直接在变量上面进行说明?
反过来想一想,在一些很复杂的问题中,变量的初始化可能非常复杂,这里的数组长度是2,如果是20,那怎么办?这样写优势就出来了,可以使得看代码的人,一目了然。
又在一个地方发现了一段类似注释的代码,是这样的:
3.对自己好用,那就用起来
刚开始有点接受不了,为了这个事情,我回忆了自己很多写过的代码,还特意翻了翻,最终我觉得以后在自己的代码中也可以逐步在合适的地方采用这种方式,一方面是由于以前没想到可以这样用,思维局限在哪里,习惯另起一行说明;另一方面的确是有很多代码需要这样明了的注释,可能自己的代码和架构能力不够,在很多地方耦合很严重,不得不通过很多的注释来表现自己的想法,而变量有特别多,像这种初始化的情况,的确是很很说明,看看我修改后的一段代码例子:
3.1 以前注释方式
以前的一段代码中,有一个固定的有限列表,是公司编号,但实际开发的时候,经常要知道对应的名称,当然数据库里面可以去查找,但代码里面直接看不到,所以我这样写的:
//权威公司编号名称(顺序):"澳门","金宝博","立博","威廉希尔","伟德","10BET","bet 365","SNAI" static List<Int32> AuthCompanyIdList = new List<int>(){ 247, 250, 251, 252, 253, 1, 469, 179};
所以以前每次打开的时候,有错误或者手动排查一些信息,对着编号去注释找,虽然次数很少,但偶尔也要用到。所以看到上面的注释方式后,修改了一下。
3.2 现在的注释方式
修改后的代码是这样的,不是特意去改,是这样改之后,我自己也觉得好多了,看到这个代码就知道意思了。
internal static List<Int32> AuthCompanyIdList = new List<int>(){
247/*澳门*/, 250/*金宝博*/, 251/*立博*/, 252/*威廉希尔*/, 253/*伟德*/, 1/*10BET*/, 469/*bet 365*/, 179 /*SNAI*/
};
其实哪种都可以,重要的是你看得懂,方便看,所以如果你觉得有用,可以用上,觉得纯属无聊,那就跳过吐槽一下。
4.最后猜猜谁写的
敲代码应该是件轻松的事情,如果能把代码写得非常优雅,好懂,当然最好不过了。最后娱乐一下,猜猜这代码来自哪里?
A:某商业机器学习算法软件的.NET例子;
B:某国外开源机器学习算法的.NET实现博客例子;
C:微软研究人员机器学习算法实现的例子;
D:Python开源社区一个机器学习算法py实现的.NET版本;
如何看待和这种注释,各抒其见把。。。。也可能是我小题大作了把。。。了解,不断改进细节,不断进步把。。
下午揭晓答案。。。。
第一段代码来自微软剑桥研究院,是Infer.NET的一个Demo代码
第二段代码来自开源机器学习组件Accord.NET Framework的实例代码