"干净的代码应该像写好的散文一样”——罗伯特·c·马丁
引用>不良代码的通病就是有很多注释。这是凌乱的源代码最明显的迹象。
每个程序员的目标应该是编写干净和富有表现力的代码,以避免代码注释。每个变量,函数和类的目的应该隐含在其名称和结构中。
当其他人读取您的代码时,他们不应该阅读注释以了解你的代码正在做什么。命名良好的类和函数应该引导读者通过你的代码,就像一本写得很好的小说一样。当读者看到一个新的类或功能时,他们不应该对他们在里面看到的东西感到困惑难以理解。
请记住,开发人员的工作时间很少花在编写代码上,花在阅读代码和理解代码上的时间要多得多。
在代码中命名是非常重要的。您应该花费大量精力准确而精确地命名每一段代码,以便其他开发人员能够理解您的代码。
//按状态查找员工 List找到(状态状态){ … } 在此示例中,名称找到不够描述,因此此函数的作者需要留下描述函数功能的描述性注释。当我们看到从另一个模块调用的发现函数时,它的作用是一个谜。它发现了什么呢?究竟是什么意思?它返回了它发现的东西吗?怎么找到它发现的东西?就像鲍勃叔叔在他的书《干净代码》中所说,如果你需要写注释,你就无法通过代码表达自己真实的用意。
我们不希望检查每个函数上面的注释,以了解它的作用。
ListgetEmployeesByStatus(状态状态){ … } 现在很明显能看出来这个函数的具体作用,这使得注释变得多余。这让我想到了注释糟糕的下一个方式。
这些混乱了你的代码,完全没必要。
//此函数发送电子邮件 空白sendEmail () { … }//此函数发送电子邮件 公共类员工{ … }/* * * @param CD的标题标题 * @param作者CD的作者 * @param跟踪CD上的曲目数 */公共空间addCd(琴弦标题,作者,int) { … }多数情况是强制冗余。很多公司在每个功能和类别上都要求这一点。如果你的上司要求这样做,请他们不要。
如果您有一个很长的功能或需要记录代码的哪一部分做了什么,那么您可能违反了这些规则:
1。功能应该做一件事。
2。功能应该很小。
这是一个例子
//此函数计算价格,与销售额进行比较//促销,检查价格是否有效,然后//向用户发送促销电子邮件 公共空间dosomething () {//计算价格 … … …//将计算出的价格与促销活动进 … … …//检查计算的价格是否有效 … … …//向用户发送促销信息 … … … }当你成功地将逻辑的每个部分封装到一个单独的函数中时,代码不需要注释就会表现的应该像它的作用描述一样。
重构如下:
公共空间sendPromotionEmailToUsers () { calculatePrices (); compareCalculatedPricesWithSalesPromotions (); checkIfCalculatedPricesAreValid (); sendPromotionEmail (); }而不是注释代码的每个部分,每个逻辑块应该很好地封装在它自己的函数中。
首先,这提高了<强>可读性>强。每个代码块不必逐行读取。我们可以简单地读取辅助函数名称并理解它的作用。如果我们想要了解每个函数内部的更多细节,就能去看具体实现。
其次,它提高了<>强可测试性>强。在上面的示例中,我们可以为每个函数单独进行单元测试。如果不封装这些单独的函数,则很难测试较大函数sendPromotionEmailToUsers()的每个部分。执行多个功能的功能很难测试。
最后,它提高了<强>可重构性>强。通过将逻辑的每个部分封装到自己的函数中,将来更改维护更容易,并且单独功能的函数会被隔离以仅更改该函数的行为。当我们使用局部变量的长函数在整个函数中持续存在时,由于函数的紧耦合,很难在不导致其他地方变化的情况下重构函数。
美化java代码,从合理注释开始