关于Hard Code的思考 - 程序员的管理不能简单使用制度
2005-11-23 23:56
603 查看
版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
先说Hard Code吧,这个问题我想有经验的程序员都知道,但是还是说一下吧。比如有这么一段代码:
int sum = count * price * 0.75;
这里面的0.75就是一个"Magic number",也叫hard code。有人翻译成“硬编码”。这样是不好的,因为
1。读代码的人不会知道0.75是什么意思。
2。如果这个数字将来要变化,恨难修改。
3。如果是个字符串,说不定有spell error。
...
问题很多,我就不多说了,我们是一定不能Hard Code的。
于是,为了防止程序员写出低质量的代码,“永远不能Hard Code”这一点被写入了编程规范,并且由SQA监督,定期做Code review来查看是否有人触犯编程规范。
但是,有趣的事情发生了,看下列代码:
int sum = count * price * SEVENTY_FIVE;
String sql = SELECT + BLANK + FROM + BLANK + ASTERISK + tableName + BLANK + WHERE
+ BLANK + fieldName + EQUAL + String.valueOf(sum);
看到这样的代码,做Code Review的人是看不到Hard Code了,可是这样写出来的代码,还不如Hard Code呢。问题在哪里呢?关键是那些用来替换“magic number”的变量的取名,这些变量的取名应该具有实际的意义,如果说 sum = count * price * DISCOUNT; 这样就比较好懂,因为折扣是有Business方面的意义的,而SEVENTY_FIVE是没有Business方面的意义的,而且DISCOUNT可以变成其它的值,想80,但是SEVENTY_FIVE就不能是80。
思考一下,不仅仅是如何避免Hard Code的问题,还有就是如果把这些思想在整个团队里面能正确的执行,这是一个很好玩的话题。
先说Hard Code吧,这个问题我想有经验的程序员都知道,但是还是说一下吧。比如有这么一段代码:
int sum = count * price * 0.75;
这里面的0.75就是一个"Magic number",也叫hard code。有人翻译成“硬编码”。这样是不好的,因为
1。读代码的人不会知道0.75是什么意思。
2。如果这个数字将来要变化,恨难修改。
3。如果是个字符串,说不定有spell error。
...
问题很多,我就不多说了,我们是一定不能Hard Code的。
于是,为了防止程序员写出低质量的代码,“永远不能Hard Code”这一点被写入了编程规范,并且由SQA监督,定期做Code review来查看是否有人触犯编程规范。
但是,有趣的事情发生了,看下列代码:
int sum = count * price * SEVENTY_FIVE;
String sql = SELECT + BLANK + FROM + BLANK + ASTERISK + tableName + BLANK + WHERE
+ BLANK + fieldName + EQUAL + String.valueOf(sum);
看到这样的代码,做Code Review的人是看不到Hard Code了,可是这样写出来的代码,还不如Hard Code呢。问题在哪里呢?关键是那些用来替换“magic number”的变量的取名,这些变量的取名应该具有实际的意义,如果说 sum = count * price * DISCOUNT; 这样就比较好懂,因为折扣是有Business方面的意义的,而SEVENTY_FIVE是没有Business方面的意义的,而且DISCOUNT可以变成其它的值,想80,但是SEVENTY_FIVE就不能是80。
思考一下,不仅仅是如何避免Hard Code的问题,还有就是如果把这些思想在整个团队里面能正确的执行,这是一个很好玩的话题。
相关文章推荐
- 关于Hard Code的思考 - 程序员的管理不能简单使用制度
- OA中总结:s:select,关于使用modelDriven,项目分层,@Transactional,jspf,各个层上配置注解交给spring管理的方法,简单的OGNL表达式写法
- 关于EAS中供应链管理的kdtable不能直接使用ctrl+c、v进行复制、粘贴的问题
- 关于sql时间函数的一些简单的例子(本机本地时间,国外服务器不能使用)
- 关于SharedPreferences工具类的使用思考
- Android关于Activity的一些使用和全局管理技巧
- 关于Calligraphy的使用简单集成示例
- 关于oracle客户端不能使用的解决办法
- 7 Django系列之关于bootstrap-table插件的简单使用
- 关于合理使用SpringMVC统一异常处理机制以改善代码风格的一些思考
- IIS8.5关于“ 配置错误 不能在此路径中使用此配置节”的解决办法
- Log4j日志管理系统简单使用说明
- android:关于自定义不能滑动的ViewPager后在使用View加载其所在的的布局时报错:Error inflating class view.NoscrollViewPager
- 艾伟也谈项目管理,你适合做一个项目经理吗 - 关于项目经理的终极思考
- 关于asp.net3.5(S2008)中ajaxcontroltoolkit控件不能使用的解决办法
- 关于软件防止破解的思考,如何避免简单的跳转指令型的验证方法,如何设置更复杂的验证方式。
- 关于技术与管理的思考
- 关于android通过servlet访问MySql数据库的问题(附带简单的JSON使用)
- OC 中关于block使用的简单举例说明
- 关于使用PRO*C编程的一些简单说明和例子