The Last Day Of Summer

.NET技术 C# ASP.net ActiveReport SICP 代码生成 报表应用 RDLC
posts - 305, comments - 1973, trackbacks - 78, articles - 3
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

不要让注释比代码更难读

Posted on 2006-11-13 08:49 Cure 阅读(2500) 评论(23)  编辑 收藏 网摘 所属分类: .Net开发

 C#XML 文档注释给我们提供了很多方便,我们可以用它来生成文档,特别是对框架,类库,生成完整的参考手册,还可以在编码时现实提示,帮助。但是,我们也要注意,XML 文档注释有时会给代码的阅读者带来一些不好的体验,我们来看看ZedGraph这个开源项目的一段代码。

 

下面的这段代码来自ZedGraphLocation.cs文件:

/// <summary>

/// Transform a data point from the specified coordinate type

/// (<see cref="CoordType"/>) to display device coordinates (pixels).

/// </summary>

/// <remarks>

/// If <see paramref="pane"/> is not of type <see cref="GraphPane"/>, then

/// only the <see cref="CoordType.PaneFraction"/> transformation is available.

/// </remarks>

/// <param name="pane">

/// A reference to the <see cref="PaneBase"/> object that contains

/// the <see cref="Axis"/> classes which will be used for the transform.

/// </param>

/// <param name="x">The x coordinate that defines the point in user

/// space.</param>

/// <param name="y">The y coordinate that defines the point in user

/// space.</param>

/// <param name="coord">A <see cref="CoordType"/> type that defines the

/// coordinate system in which the X,Y pair is defined.</param>

/// <returns>A point in display device coordinates that corresponds to the

/// specified user point.</returns>

public static PointF Transform( PaneBase pane, double x, double y, CoordType coord )

{

        return pane.TransformCoord( x, y, coord );

}

 

这个方法的代码总共只有3行,但是注释却有19行,而且这些注释中还夹杂着<see cref="PaneBase"/><see paramref="pane"/>这样的引用,使得这段注释看起来比较吃力,如果你好容易把这段注释看完了,展开折叠的代码一看,可能就会有点失望,本来以为有很多代码,结果呢?就一行。

 

这个函数的参数就4个,不算很多,但是可以相见,当参数增多时,这种注释会更多。所以避免出现过长参数列这种代码的坏味道能够缩短xml文档注释的长度。

 

函数重载也会对xml文档产生影响。因为在函数重载时常常会调用另一个重载版本,只是再稍加处理,这样就造成函数的多个重载版本的注释有很多是重复的,这同样是一种坏味道。从Location.cs中的其他方法就更可以感受到函数重载对XML文档注释的影响。

 

C#的文档注释的功能,共有18个标记,如果在注释里过多的使用这些标记,注释本身就会比它要表达的内容更难理解,不但不能起到说明代码的作用,还会加重代码的坏味道。也许这些注释的内容应该在类库参考手册中看,而不是在代码中阅读,但是它确实对代码的阅读者造成了干扰。

 

要保证注释的清晰易读,仅仅避免代码出现坏味道还是不够的,还要明白,在注释里我们应该写什么而不是能够写什么。把适合写进xml文档注释的内容写进去,把不适合写的用其他的文档来代替。

 

Feedback

#1楼   回复  引用  查看    

2006-11-13 09:17 by 柠檬      
同意楼主意见

#2楼   回复  引用    

2006-11-13 09:27 by flyMiss[未注册用户]
用NDOC来生成文档来看注释,会看的更加清楚

#3楼   回复  引用  查看    

2006-11-13 09:29 by 深夜醉猫      
对于代码的注释,很多人都有不同见解!
基本上分为以下的两种:
1.好的代码就是最好的注释,根本就不需要为代码添加什么注释。
2.对于关键性的语句还要添加注释,毕竟不是每个人都能明白你的意图。

其实注释一种学问啊,有时间要写一篇关于注释的文章。

#4楼   回复  引用  查看    

2006-11-13 09:30 by Edwin Liu      
这样写,可能不是全是为了让写代码的人员看,可能更多的是为了以后自动帮助文档的生成.

#5楼   回复  引用  查看    

2006-11-13 09:55 by Yok      
这是很标准的xml注释啊

#6楼   回复  引用  查看    

2006-11-13 10:09 by 阿武      
确实,有的时候我们并不一定去看源代码,尽管它只有一行语句,我们也不一定需要去了解方法里面的实现,这时候详细的注释就很有必要了

#7楼   回复  引用  查看    

2006-11-13 10:38 by 风云      
@Edwin Liu
非常同意Edwin Liu的观点,做为开源项目目的就是让更多的人去了解去运用,如果你不把注释写的详细一点,那么用起来(查API时)可真是费尽,注释的作用主要是针对使用者来说的,是为使用者提供了方便!,如果通过发射工具看看.net 的api你会发现那个注释比这个长的多得多,要不然怎么有1个多G的msdn呢?

#8楼   回复  引用  查看    

2006-11-13 10:51 by Jeffrey Zhao      
这种注释完全是为了Doc服务的,这样的方法根本不用注释……

#9楼   回复  引用  查看    

2006-11-13 12:03 by S.Sams      
至少做些简单的注释还是必要的!

#10楼   回复  引用    

2006-11-13 12:52 by ddee[未注册用户]
@楼主
我不同意你的观点。
对于普通项目根本不能抽出专业的人员去写api文档,所以在写代码时就写文档,这种习惯是相当的。
在xml注释中,使用<see>等标签,完全是出于生成后的文档的可用性考虑的。这种注释方法本来就不是为了你读代码而准备的

#11楼   回复  引用  查看    

2006-11-13 13:57 by kiler      
你想看这种注释就直接看生成好的api文档就行了嘛。

#12楼   回复  引用  查看    

2006-11-13 15:52 by jillzhang      
他这样不是为了看源代码,肯定是为了生成详尽的文档。
一般他自己以后维护代码也不会直接在代码上找。而是先查看文档

#13楼   回复  引用  查看    

2006-11-13 17:17 by U2U      
同意

#14楼   回复  引用  查看    

2006-11-13 18:21 by ZergTant      
你说的很对,如果是项目应该这样
但open source又不是open document作者自己看懂就行了

#15楼[楼主]   回复  引用  查看    

2006-11-13 20:01 by Cure      
@ddee
读代码的时候不可能不读注释,即使它不是为读代码准备的,但是它就放在那里,不会对读代码造成干扰吗?除非我每次看到这样的注释都告诉自己,这段注释没用,是用来生成api文档的。
不是为读代码准备的,却和代码混在一起,对代码阅读没帮助反倒有害,这样的注释是不是应该考虑用更好的方式来表达自己的含义呢?

#16楼   回复  引用  查看    

2006-11-14 09:14 by 笑望人生      
这是个非常好的注释,而贴主的话我不敢苟同。

我的习惯就是,我在写后台通用支持库的时候,一定是要把XML注释写清楚的,有些重要的方法内部代码我也要写注释,就怕隔一段时间看不懂。

我看了网上的许多的C#代码,发现许多人的<summary>部分写的很详细,但是大部分人都不写<param> 和 <returns> 以及 <exception>部分,更加不要说<remarks>部分了,这些注释我吃过很大的亏,经过三个月自己写的代码许多地方都看不懂,后来自己立了一个规矩,迫使自己必须写xml注释。

#17楼   回复  引用    

2006-11-14 09:22 by roydu
注释比代码更难读,说明你E文不好:)

这样的注释是很标准的.

#18楼[楼主]   回复  引用  查看    

2006-11-14 12:58 by Cure      
楼上两位都是从书写者的角度来看的,这样的注释很标准,这当然没得说,毕竟我还不敢否定微软规定的标准。:)
但是我想换个角度呢?

#19楼   回复  引用    

2006-11-25 00:06 by seakingii[未注册用户]
这样写是没问题的,你如果觉得看的累你可以看生成的文档。实在要在代码里看,建议你写个宏把你不想看的给删除掉。

#20楼[楼主]   回复  引用  查看    

2006-11-27 18:28 by Cure      
@seakingii
谢谢你的建议:)

#21楼   回复  引用  查看    

2007-05-24 09:54 by t-mac.NET      
很好的注释啊,不知楼主为什么要反对

#22楼[楼主]   回复  引用  查看    

2007-06-10 00:08 by Cure      
@t-mac.NET
主要是看代码的时候太多注释不能很好得突出真正要看的代码。

#23楼   回复  引用    

2007-09-20 17:45 by 498505278[未注册用户]
abcdefghijklmnopqstuvwxy





发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 558764




相关文章:

相关链接: