什么样的代码才是真正好的、整洁的代码?iteye.com上的文章很多:
Grady Booch,《面向对象分析与设计》作者:
引用
• 整洁的代码是简单、直接的;
• 整洁的代码,读起来像是一篇写得很好的散文;
• 整洁的代码永远不会掩盖设计者的意图,而是具有少量的抽象和清晰的控制行。
Dave Thomas,OTI公司创始人,Eclipse战略教父:
引用
• 整洁的代码可以被除了原作者之外的其他开发者阅读和改善;
• 具备单元测试和验收测试;
• 有一个有意义的名字;
• 使用一种方式来做一件事情;
• 最少的依赖,并明确定义;
• 提供了一个清晰的、最小的API;
• 应该根据语言特性,在代码中单独显示必要的信息,而不是所有的信息。
从他们的归纳中,可以看出真正好的代码都有一个共性,可读性。在《编写可读代码的艺术》这本书中,作者是这样定义可读性的:“代码的写法应当使用别人理解所需的时间最小化”。在这本书的指导下,从命名和注释开始在自己这几年写的代码中找出一些例子。希望自己以后在这些细节上引以为戒。
一.把信息封装到名字中,无论是类,方法或变量的命名
1.选择专业的词,尽量避免模糊或意义太广
。
public List<UserIp> select(String userId){
}
如果改成这样是不是更明确:
public List<UserIp> queryUserIps(String userId){
}
2.避免泛泛的名字
避免像tmp,i,j ,k这样泛泛的名字,比较常见循环中的 i,j,k.
for (int j = 0; j < actionLogs.size(); j++) {
ActionLog actionLog = actionLogs.get(j);
}
如果改成这样:
for (int index = 0; index < actionLogs.size(); j++) {
ActionLog actionLog = actionLogs.get(index);
}
3.用具体的名字代替抽象的名字
在给变量,函数或者其它元素命名时,要把它描述的更具体而不是更抽象。
/**
* 刷新IP库
*/
public void refreshData() ;
如果改成这样:
/**
* 刷新IP库
*/
public void refreshIpData() ;
4.使用前缀或后缀来给名字附带更多信息
对于像带单位的值均可以用后缀来附加更多信息
常见的打印日志的代码:
long startTime = System.currentTimeMillis();
if (logger.isInfoEnabled()) {
logger.info((System.currentTimeMillis() - startTime) + "ms,success!");
}
如果改成这样:
long startMs = System.currentTimeMillis();
if (logger.isInfoEnabled()) {
logger.info((System.currentTimeMillis() - startMs ) + "ms,success!");
}
5.决定名字的长度
(1)在小的作用域里可以使用短的名字,丢掉没用的词。
public static StrategyType convertToStrategyType(StrategyTypeDO strategyTypeDO) {
}
如果改成这样:
public static StrategyType toStrategyType(StrategyTypeDO strategyTypeDO) {
}
6.给boolean命名
通常来讲,加上is,has,can 或should这样的词,可以把布尔值变得更明确。
如代码:
boolean first = true;
if(subConditions!=null&&subConditions.size()>0){
for (FactorCondition condition : subConditions) {
String template = generateCode(condition);
sbf.append((first ? "" : " || ") + "( " + template + " )");
if (first) {
first = false;
}
}
}
若改为:
boolean isFirst = true;
if(subConditions!=null&&subConditions.size()>0){
for (FactorCondition condition : subConditions) {
String template = generateCode(condition);
sbf.append((isFirst ? "" : " || ") + "( " + template + " )");
if (isFirst) {
isFirst = false;
}
}
}
7.与使用者的期望相匹配
方法的名称要符合用户的期望,我们通常期望get()方法是轻量的方法。
public double getFPSecurityModelScore(Event event) {
//这里省略
}
若改为:
public double computeFPSecurityModelScore(Event event) {
//这里省略
}
二.代码风格与注释
一致的风格要比“正确”的风格更重要,对于一个团队乃至一个公司,要采用一致的格式化模板。对于注释,一定不要为注释而注释,许多时候好代码>坏代码+注释,当你觉得要写很多注释时,也从侧面反映出你的代码或设计不太美妙。注释的目的就是尽量帮助读者了解和作者一样多。
1.不要为了注释而注释
/**
* Getter method for property <tt>groupName</tt>.
*
* @return property value of groupName
*/
public String getGroupName() {
return groupName;
}
/**
* Setter method for property <tt>groupName</tt>.
*
* @param groupName value to be assigned to property groupName
*/
public void setGroupName(String groupName) {
this.groupName = groupName;
}
当然,上面的的注释是由模板生成的,确有为了注释而注释之嫌。
2.注释要记录你的思想.
包括为什么代码写成这样而不哪样的内在理由。对于代码的缺陷或需要优化的地方可给予注释,对于常量,可记录常量背后的故事,为什么是这个值,如:
/**
* The load factor used when none specified in constructor.
*/
static final float DEFAULT_LOAD_FACTOR = 0.75f;
3.站在读者的立场上思考。
为普通读者意料之外的行为加上注释,用注释来总结代码块或精确地描述函数的行为,使读者不致迷失在细节中。
三.细节决定成败,表面并非肤浅
对于上面的每一个细节如果都能做的很好,这就为写好代码,写好可读代码,写好整洁代码迈出了第一步。
参考资料:《编写可读代码的艺术》
分享到:
相关推荐
《编写可读代码的艺术》是一本专注于提升代码可读性的著作,它强调了代码的可读性对于软件开发的重要性。可读代码不仅有助于团队协作,还能降低维护成本,提高软件质量。以下是书中涵盖的一些关键知识点: 1. **...
《编写可读代码的艺术》是一本致力于提升代码可读性的书籍,强调了代码可读性在软件工程中的重要性。代码可读性不仅关乎程序员之间的沟通效率,还直接影响到软件的维护成本。以下是对书中一些核心观点的提炼: 1. *...
《编写可读代码的艺术》是一本专注于提升代码可读性的著作。在软件开发领域,代码的可读性是至关重要的,因为代码不仅是机器执行的指令,更是开发者之间沟通的工具。良好的代码可读性能够提高团队协作效率,降低维护...
《编写可读代码的艺术》是一本由Dustin Boswell和Trevor Foucher共同撰写的书籍,它旨在教授程序员如何编写出易于理解的代码。该书的核心理念强调代码不仅应该能够运行,更重要的是能够让其他人在最短的时间内理解其...
《O’Reilly精品图书系列:编写可读代码的艺术》关注编码的细节,总结了很多提高代码可读性的小技巧,看似都微不足道,但是对于整个软件系统的开发而言,它们与宏观的架构决策、设计思想、指导原则同样重要。...
书中的内容涵盖了编程语言的进阶技巧、代码重构方法以及提升代码艺术性的诸多方面。以下是该书涉及的一些关键知识点: 1. **代码可读性的重要性**:良好的代码可读性能够帮助开发者更快地理解代码逻辑,提高代码...
《编写可读性代码的艺术》是一本专注于提升代码质量,特别是强调代码可读性的书籍。在IT行业中,尤其是在软件开发领域,代码的可读性至关重要,因为它直接影响到代码的维护和扩展。良好的代码可读性不仅是对其他...
《编写可读性代码的艺术》这本书聚焦于如何提高代码的可读性,强调代码不仅应该能够被计算机正确执行,更重要的是能够让其他开发者快速理解其功能和逻辑。本书通过一系列实用的指导原则和最佳实践,帮助读者掌握编写...
本书分成四部分:表面层次上的改进命名、注释以及审美——可以用于代码库每一行的小提示。简化循环和逻辑在程序中定义循环、逻辑和变量,从而使得代码更容易理解。重新组织你的代码在更高层次上组织大的代码块以及在...
1. **代码规范**:书中强调了遵循统一的编码风格和命名约定的重要性,这不仅有助于团队协作,还能使代码更易于理解和调试。例如,使用有意义的变量名,遵循缩进规则,以及避免过长的函数和过深的嵌套。 2. **注释与...
### 如何写好代码——注释 #### 一、好代码的标准 优秀的代码不仅能够实现功能需求,还应该具备良好的可读性、可维护性和扩展性。...记住,编写高质量的代码不仅仅是实现功能那么简单,更是一种艺术和责任。
本文将探讨如何编写可读性强的代码,包括代码风格、命名约定、代码结构、注释和文档等方面。 代码是程序员与程序员沟通的桥梁。良好的代码可读性能够使其他开发者更快地理解代码的意图和逻辑,从而提高团队协作的...
他的职业生涯和贡献说明了软件工程师的价值不仅仅在于写代码,更在于将个人的热情、专业知识和对代码艺术的追求结合在一起。 总而言之,《代码的艺术》不仅是一篇技术文章,更是对软件工程师职业生活的深刻反思和...
接着,章淼阐释了艺术的本质,艺术家的思考方式,以及编写代码的过程,从无序到有序,将现实世界问题转化为数字模型。 在实践方面,课程详细讨论了好代码的特性,包括高效性、鲁棒性、简洁性、可维护性、可测试性、...
《修改代码的艺术》一书深入探讨了在软件开发过程中如何优雅地进行代码修改,以保持代码的可读性、可维护性和性能。这本书的核心理念是,代码修改不仅仅是修复错误,而是一个提升软件质量的重要环节。以下是一些关键...
良好的代码结构和命名应自解释,注释只用于补充复杂逻辑或非直观的设计。 5. 遵循编程规范和风格指南:统一的代码风格能提高团队协作效率,减少审阅代码时的困惑。例如,遵循PEP8(Python)或Google Java Style ...
如果要改进这个项目,首先需要进行代码重构,将功能分解为更小的、可重用的组件,并添加必要的注释。 Bug的存在则意味着程序在某些情况下可能无法正常工作。调试和修复Bug是软件开发中的常规任务,通常需要利用调试...