团队项目开发"编码规范"之三:程序注释
发布日期:2011年3月18日星期三作者:EricHu
勤能补拙、笨鸟先飞。
3.1 注释概述
1、修改代码时,总是使代码周围的注释保持最新。
2、在每个例程的开始,提供标准的注释样本以指示例程的用途、假设和限制很有帮助。注释样本应该是解释它为什么存在和可以做什么的简短介绍.
3、避免在代码行的末尾添加注释;行尾注释使代码更难阅读。不过在批注变量声明时,行尾注释是合适的;在这种情况下,将所有行尾注释在公共制表位处对齐。
4 、避免杂乱的注释,如一整行星号。而是应该使用空白将注释同代码分开。
5 、避免在块注释的周围加上印刷框。这样看起来可能很漂亮,但是难于维护。
6 、在部署发布之前,移除所有临时或无关的注释,以避免在日后的维护工作中产生混乱。
7 、如果需要用注释来解释复杂的代码节,请检查此代码以确定是否应该重写它。尽一切可能不注释难以理解的代码,而应该重写它。尽管一般不应该为了使代码更简单以便于人们使用而牺牲性能,但必须保持性能和可维护性之间的平衡。
8 、在编写注释时使用完整的句子。注释应该阐明代码,而不应该增加多义性。
9 、在编写代码时就注释,因为以后很可能没有时间这样做。另外,如果有机会复查已编写的代码,在今天看来很明显的东西六周以后或许就不明显了。
10 、避免多余的或不适当的注释,如幽默的不主要的备注。
11、 使用注释来解释代码的意图。它们不应作为代码的联机翻译。
12、 注释代码中不十分明显的任何内容。
13 、为了防止问题反复出现,对错误修复和解决方法代码总是使用注释,尤其是在团队环境中。
14 、对由循环和逻辑分支组成的代码使用注释。这些是帮助源代码读者的主要方面。
15 、在整个应用程序中,使用具有一致的标点和结构的统一样式来构造注释。
16 、用空白将注释同注释分隔符分开。在没有颜色提示的情况下查看注释时,这样做会使注释很明显且容易被找到。
17 、在所有的代码修改处加上修改标识的注释。
18 、为了是层次清晰,在闭合的右花括号后注释该闭合所对应的起点。
namespace Langchao.Procument.Web
{
} // namespace Langchao.Procument.Web
在每个文件头必须包含以下注释说明
//
// Copyright (c) HP. All rights reserved.
//
//
//
//
//
// 修改人:×××
// 修改时间:yyyy-mm-dd
// 修改描述:×××
// 版本:1.0
//
注意:文件功能描述只需简述,具体详情在类的注释中描述。创建标识和修改标识由创建或修改人员的拼音或英文名。如:Zhangsan。一天内有多个修改的只需做一个在注释说明中做一个修改标识就够了。在所有的代码修改处加上修改标识的注释。
3.3 文档型注释
该类注释采用.Net已定义好的Xml标签来标记,在声明接口、类、方法、属性、字段都应该使用该类注释,以便代码完成后直接生成代码文档,让别人更好的了解代码的实现和接口。如
1、 类、接口注释
///
/// 类功能的说明
///
///
///
/// 创建人:Zhangsan
/// 创建日期:yyyy-mm-dd
/// 修改人:Lisi
/// 修改日期:yyyy-mm-dd
/// 修改备注:无
/// 版本:1.0
///
public class CountersModuleInitializer : ModuleInitializer
{
}
注意:
2、 方法、事件注释
///
/// 根据员工编号获得员工信息
///
/// 员工编号
///
///
///
/// 创建人:Zhangsan
/// 创建日期:yyyy-mm-dd
/// 修改人:Lisi
/// 修改日期:yyyy-mm-dd
/// 修改备注:无
/// 版本:1.1
///
public string GetEmployeeNameById(int employeeId)
{
try
{
return "ddd";
}
catch (System.Exception)
{
throw;
}
}
注意:该方法注释中的、
3、 属性、常量注释
///
/// session id
///
public const string SESSION_ID = "";
3.3 单行注释
该类注释用于
1 方法内的代码注释。如变量的声明、代码或代码段的解释。注释示例:
// 注释语句
private int number;
2 方法内变量的声明或花括号后的注释, 注释示例:
if ( 1 == 1) // always true
{
statement;
}
else // always false
{
}
3.4 JavaScript注释
a) 注释符号
‘//’
不允许使用‘/**/’作注释符。
b) 函数注释
每个函数都应该描述该函数的名称、功能、作用范围、入口参数的类型和传值方式及参数含义、返回值类型及返回值的含义。格式如下:
//
//Function: 函数名
//Purpose: 用途
//Scope: 作用范围
//Args: 入口参数(列表) 类型传值方式含义
//Returns: 返回值类型 (可确定值列表) 含义
//
c) 非函数注释
注明该模块的作用
格式如下:
//
//功能:
//
d) 程序行间注释
在程序行的每一个处理单元前作注释
格式如下:
//注释
e) 注释举例
//
//Function: F_FindObject
//Purpose: 按照空间名在可视化主对象中查找住对象内的可视化控件
//Scope: Public
//Args: is_name String value:要查找的空间名
// ipbo_object Object value: 可视化主对象
//Returns: Boolean True 表示找到该控件
// False 表示没有找到该控件
//
function F_FindObject(is_name, ipbo_object) {
//获得显示学生信息的GreeView控件
var gv_student = document.getElementById("GVStudent");
***********
//返回true
return true;
}
3.5 注释标签