三Don't原则
来源:互联网 发布:java中屏蔽敏感词汇 编辑:程序博客网 时间:2024/05/07 13:55
Don’t Repeat yourself!Don’t Repeat others!Don’t Repeat public!
最近一次code review发现了不少问题。结合前些日子写的东西,我再写一个小专题。
一个程序员的成长过程中应该独立做到三个Don’t:
Don’t Repeat youself!
这就是《程序员的修养》一书中提到过的DRY。我就不详细解释了。
犯错起因:
1.缺少对于软件修改和维护的考虑;(不是懒惰而是缺乏经验和意识)
2.懒惰;(这是最可恶的)
避免方法:
1.在每一次粘贴代码的时候,都思考一下重构可能性;
2.虽然俗话说“懒人都很聪明”,但是,明知道应该做而不去做的人称不上聪明。优秀的程序员应该十分愿意随时重构自己的程序。(重构的时候有测试代码来保证重构的正确性吗?)
Don’t Repeat Others!
通过代码,我可以很容易把项目组的人员分开来,根本不需要看注释中的作者。大家在编码上都有自己的风格和习惯。例如,在java中,对于字符串是否为空的判断有两种略有不同的做法
甲做法:
if ( strTmp == null || strTmp.equal(“”)) {
……
}
乙做法:
if(strTmp == null || “”.equal(strTmp)) {
……
}
(你觉得哪一种做法更好?我认为后一种,尽管第一种也不会出什么错。至于道理,并不是现在想说的)
上面例子的区别并不明显,令我忧虑的情况就是对于同样的逻辑,A程序员会写一个函数a,B程序员会写一个函数b。因为程序员的差异,函数编写的质量存在一定的差别。这样的现象破坏了整个软件系统的一致性,对软件系统的质量构成威胁。
犯错原因:
1.项目组开发人员之间缺少足够的交流;
2.项目leader对代码Rview的力度不够;
避免方法:
1.采取各种办法加强交流与学习,推荐方法两个:
a)开发人员互相Review代码,通过Review的机会来互相学习和交流;
b)项目leader在Review中注意此类现象。当发现的时候,在多种做法中找出最好的一种在开发人员中推广。
(开发人员应该以开放的心态去多看看别人编写的代码,思考为什么别人会和自己的做法不一样?谁的更好?代码Review不仅仅是Reviewer检查Reviewed的代码,其实Reviewer也在学习。我就是这样。从大家的代码中学到了不少东西。谢谢!)
Don’t Repeat Public!
这也是我本次Review中发现的一个大问题。
Date initDate = new Date();
int initYear = initDate.getYear() + 1900;
int initMonth = initDate.getMonth() + 1;
int initDay = initDate.getDate();
String initMonthString = new Integer(initMonth).toString();
String initDayString = new Integer(initDay).toString();
if (initMonthString.length() == 1) {
initMonthString = "0" + initMonthString;
}
if (initDayString.length() == 1) {
initDayString = "0" + initDayString;
}
String initDateString = new Integer(initYear).toString().substring(2)
+ initMonthString + initDayString;
上面例子的作者是想得到一个形如“yyyy mm dd”的字符串。Java的sdk中,提供了SimpleDateFormat类来取得特定格式的日期。利用SimpleDateFormat,我们可以很简单就完成这段代码:
SimpleDateFormat sdfOperator=new SimpleDateFormat("yMMdd");
Date dToday =new Date();
String initDateString =sdfOperator.format(dToday);
明明有现成的API,却不去使用。自己发明的算法不会有问题吗?
犯错原因:
1.对使用语言的不熟悉;
2.认为现成的API或者工具不好使,不如自己做;
避免方法:
1.第一个问题比较好解决,通过不断的工作去积累经验;
2.第二个问题就难了一点。“血气方刚”的程序员通常会有一点“傲气”,但是,当你打算舍弃现成的东西而要重新”make a new wheel”的时候,最好对自己是100%有信心。比较好的做法就是编写比较好的单体测试代码来证明自己的轮子“是圆的”!
总结:
在这三个问题中,第一个和第三个问题可以归结为个人问题,比较好解决。但是,问题2就不那么简单了。因为他强调的是开发团队的交流,这也正是决定项目能够成功的重要因素。
优秀的团队不仅仅是大家相处气氛是否和谐,思想和经验是否得到有效的传播才是气氛和谐的目的。无论什么时候还是让我们用“代码”来讲话吧!
- 三Don't原则
- 《Don't Make Me Think》读书笔记三
- 命令,不要去询问(Tell, Don’t Ask)”原则
- 软件开发流行的原则:don't repeat yourself
- Don't Cry
- Don't use XP!
- Don't Use Select *
- Don't you worry
- Don't Wanna Try
- don't cry
- Don't Cry
- don't cry
- Don't say goodbye
- don't say goodbye
- don't lost
- Don't use extjs
- Don't overskill
- You don't say!
- 2005年Goole编程大赛初赛题目二(750分)
- 华为软件编程规范和范例
- JavaScript极速狂飙:组合拼接字符串的效率
- 使用StringBuilder类与使用简单字符串连接要快的多
- web.config文件详解
- 三Don't原则
- SQL的基本操作(1.数据类型)
- 测试的交流
- 无为的生活中有所感悟的一篇劝勉高考生的文章
- 用c++ 操作mysql 数据库类(for linux or windows and others)
- 在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
- 揭密SQL Server DATETIME数据类型
- Linux环境进程间通信(五): 共享内存(下)
- 编译器优化奠基人:John Cocke