一线研发之声 https://bbs.21ic.com/?567930 [收藏] [复制] [RSS] ------最底层、最深邃、最负重的编程之歌

日志

一线研发之声 之 完美主义者的程序员特征 <二>

热度 9已有 4497 次阅读2013-12-25 23:04 |个人分类:一线研发之声|系统分类:嵌入式系统| 空格, 换行, 代码规范

3.空格、换行、常量替换、{}保护、还有效率。

       
  1. if((long_state_var==1)||(long_state_var==2)||((ch>0x2F)&&(ch<0x3A)))
  2.     do_something();
复制代码
  1. 看到这种代码,他就感觉浑身难受、头晕恶心…..

狂吼一声,这段代码立马会给改成这样。

       
  1. if ((long_state_var==1)||(long_state_var==2) \
  2.      ||((ch>0x2F)&&(ch<0x3A)))
  3. {
  4.     do_something();
  5. }
复制代码

长字符行要换行,模块要添加{}保护,这是做人的底线。


  1. 再瞄一眼,会发现没有空格也很让人难过。

赶紧快速编辑了而下,舒了口气。

       
  1. if ( (long_state_var == 1)         \
  2.   || (long_state_var == 2)         \
  3.   || ((ch>0x2F) && (ch<0x3A)) )
  4. {
  5.     do_something();
  6. }
复制代码

     加上空格的美化,更有层次感。


  1. 当他开始维护这段代码,搞清楚逻辑后,无意义的常量就会被处理成这样的,长变量名也会被适当缩短。而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. 后来他感觉,还是有些不妥。干脆又改了下,最后变成这样。
       
  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的加入,使得代码与注释浑然天成。


  1. 后来他在优化过程中发现,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. }
复制代码

      为了效率,可以牺牲一点代码可阅读性。



下接 一线研发之声 之  完美主义者的程序员特征<三>


路过

鸡蛋
8

鲜花

握手

雷人

刚表态过的朋友 (8 人)

发表评论 评论 (3 个评论)

回复 sedatefire 2014-1-2 23:15
谢谢大家
回复 xlsbz 2014-1-14 08:54
if((long_state_var==1)||(long_state_var==2)||((0x2F<ch)&&(ch<0x3A)))
{
   //DO something!!!
}
回复 sedatefire 2014-1-14 10:34
xlsbz: if((long_state_var==1)||(long_state_var==2)||((0x2F<ch)&&(ch<0x3A)))
{
   //DO something!!!
}
if (1 == long_state_var) /* 常量颠倒更安全 */
{
}