设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 773|回复: 0

转帖:完美主义者的程序员特征 <二>

[复制链接]

签到天数: 9 天

[LV.3]偶尔看看II

发表于 2014-12-31 09:04:07 | 显示全部楼层 |阅读模式
转自:http://bbs.21ic.com
3.空格、换行、常量替换、{}保护、还有效率。
  1. if((long_state_var==1)||(long_state_var==2)||((ch>0x2F)&&(ch<0x3A)))
  2.     do_something();
复制代码
看到这种代码,他就感觉浑身难受、头晕恶心…..
狂吼一声,这段代码立马会给改成这样。
  1. if ((long_state_var==1)||(long_state_var==2) \
  2.      ||((ch>0x2F)&&(ch<0x3A)))
  3. {
  4.     do_something();
  5. }
复制代码
长字符行要换行,模块要添加{}保护,这是做人的底线。
再瞄一眼,会发现没有空格也很让人难过。
赶紧快速编辑了而下,舒了口气。
  1. if ( (long_state_var == 1)         \
  2.   || (long_state_var == 2)         \
  3.   || ((ch>0x2F) && (ch<0x3A)) )
  4. {
  5.     do_something();
  6. }
复制代码
加上空格的美化,更有层次感。
当他开始维护这段代码,搞清楚逻辑后,无意义的常量就会被处理成这样的,长变量名也会被适当缩短。而0x2F、0x3A这种坑爹的的常量,则会被他心里狠狠地鄙视:
  “丫丫的,原创者这是在炫智商、秀优越吗?”。
  1. #define MODE_NAME_1        (1)      /* 简单描述模式1 */
  2. #define MODE_NAME_2        (2)      /* 简单描述模式2 */
  3. if ( (stat == MODE_NAME_1) || (stat == MODE_NAME_2)     \
  4.    || ((ch>='0') && (ch<='9')) ) /* 数字字符 */
  5. {
  6.     do_something(ch);
  7. }
复制代码
常量用宏替代,这样的代码意图会比较清晰。
后来他感觉,还是有些不妥。干脆又改了下,最后变成这样。
  1. #include
  2. ……
  3. if ( (stat == MODE_NAME_1) || (stat == MODE_NAME_2) \
  4.    || is_digit(ch) )
  5. {
  6.     do_something(ch);
  7. }
复制代码
is_digit的加入,使得代码与注释浑然天成。
    后来他在优化过程中发现,ch的值在99%的情况下都满足'0'~'9'。
    这个时候,这段代码又会被优化成这样的。
  1. if (is_digit(ch))
  2. {
  3.     do_something(ch);
  4. }
  5. else if ((stat == MODE_NAME_1) || (stat == MODE_NAME_2))
  6. {
  7.     do_something(ch);
  8. }
  9. else
  10. {
  11.     /*已考虑无误*/
  12. }
复制代码
为了效率,可以牺牲一点代码可阅读性。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2018-1-23 18:12 , Processed in 0.106073 second(s), 24 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表