代碼註釋的作用,簡單的說,就是讓人能夠讀懂你的代碼。
讀 懂代碼有什麽用?當你接手他人的工作時,註釋可以幫助你瞭解代碼隱含的業務邏輯。我在接手ATIP這個系統時,看到前人寫的幾十、上百行代碼中只有一兩行 註釋,真恨不得提刀躍馬去砍了那人。當你修改自己的代碼時,註釋可以讓你知道這段代碼的作用、初衷,并可以幫你分析修改這段代碼可能造成的影響。而且很多 時候,當我回頭看自己三個月前寫的代碼時,常常發現自己甚至忘記了我居然寫過這段代碼!這種狀態下,讓我去解釋、修改,簡直是天方夜譚了。
當然,好的命名可以對代碼進行自解釋。這與寫註釋不衝突,而是互補。
用具體的例子來解釋,可以比較以下幾組代碼。黃色底色為無註釋版,綠色底色為有註釋版。
對比組二。爲什麽dateFormat這個變量要註釋掉?爲什麽把while循環改成do-while?這也是註釋的另一個作用。敏捷開發不崇尚文檔,知識的積累和傳播,很大程度上就依靠代碼和註釋。
對比組二。爲什麽dateFormat這個變量要註釋掉?爲什麽把while循環改成do-while?這也是註釋的另一個作用。敏捷開發不崇尚文檔,知識的積累和傳播,很大程度上就依靠代碼和註釋。

public abstract class DefaultGenerateExcelServiceImpl<T extends ExcelMap>
extends AbstractPagedInfoServImpl<ExcelMap> implements
GenerateExcelService {
/**
* protected static DateFormat dateFormat = new
*                SimpleDateFormat("yyyy-MM-dd");
*/

@Override
public void generateExcel(final ExcelMap map, final String fileName)
    throws SAABException {
……(字數限制,略去)
    // while (startIndex < countInDB)
    do {
……(字數限制,略去)
    }
    while (countInDB > 0);
}
}}
public abstract class DefaultGenerateExcelServiceImpl<T extends ExcelMap>
extends AbstractPagedInfoServImpl<ExcelMap> implements
GenerateExcelService {
/**
* 日期格式化类,用于子类的数据格式化处理中。<br />
* 2012年10月23日 这个DateFormat是线程不安全的。不能这样使用。各子类自己去实现好了
*
* @author 团长
* @since 2012-10-22 protected static DateFormat dateFormat = new
*                SimpleDateFormat("yyyy-MM-dd");
*/

/**
* 从数据库中分批读取数据、写入excel的方法。<br />
* 2012年10月10日 要求传入参数fileName包含有完整的物理路径和后缀。团长<br />
* 基本流程是: 1、查询数据库中的数据总量;2、根据数据总量、一次需要导入的数据量等,从数据库中获取一次要导入的数据<br />
* 3、将这一次要导入的数据写入excel中;4、循環步進。
*
* @author 团长
* @since 2012-9-26
* @throws 无
* @see com.sinosig.atip.common.excel.generate.GenerateExcelService#generateExcel(com.sinosig.atip.common.excel.generate.model.ExcelMap)
*
*/

@Override
public void generateExcel(final ExcelMap map, final String fileName)
    throws SAABException {
……(字數限制,略去)
    // while (startIndex < countInDB)
    // 2012年09月28日 当countInDB=0时,原有的while循环将出现问题,因此改为do-while
    // 当countInDB=0时,startIndex=endIndex=0,while条件将不成立,从而不生成文件
    // 如果将while条件改成<=,循环步进将失去意义,因为startIndex=endIndex=countInDB=0将恒成立
    do {
……(字數限制,略去)
    }
    // 还没有导完的情况下,即数据库中还有剩余数据
    while (countInDB > 0);
    /* 2012年10月09日 atip-35 职责分离 团长 始 */
    // 这里原本还有压缩zip包以及存入数据库的功能代码。考虑到单一职责,以及业务的耦合性
    // 将这两部分代码剥离了出去。
    /* 2012年10月09日 atip-35 职责分离 团长 终 */
}
}