完美主义者的程序员特征

嵌入式ARM 2019-03-07 16:50


信息来源于网络


观文识人,代码无疑是了解一个程序员的最佳途径。且不论算法思路,单就代码的界面风格,便可知一二。


1. 追求精美的对齐。尽可能精确到每一个"断点",是他的追求。



2.没有tab字符,而是采用4个或8个空格键代替。



编辑时敲入的是tab键,但其编辑器会设置"文件保存时tab用空格字符替代" 为何呢,因为这样的代码,无论在那种编辑器上打开,都一定是对齐的。拷给别人,才不担心形象受损。


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


if((long_state_var==1)||(long_state_var==2)||((ch>0x2F)&&(ch<0x3A)))

  do_something();

  看到这种代码,他就感觉浑身难受、头晕恶心…..

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

  if ((long_state_var==1)||(long_state_var==2) \

  ||((ch>0x2F)&&(ch<0x3A)))

  {

  do_something();

  }

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

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

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

  if ( (long_state_var == 1)                \

  || (long_state_var == 2)                  \

  || ((ch>0x2F) && (ch<0x3A)) )

  {

  do_something();

  }

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

  当他开始维护这段代码,搞清楚逻辑后,无意义的常量就会被处理成这样的,长变量名也会被适当缩短。而0x2F、0x3A这种坑爹的的常量,则会被他心里狠狠地鄙视:

  “丫丫的,原创者这是在炫智商、秀优越吗?”。

  #define MODE_NAME_1 (1) /* 简单描述模式1 */

  #define MODE_NAME_2 (2) /* 简单描述模式2 */

  if ( (stat == MODE_NAME_1) || (stat == MODE_NAME_2) \

  || ((ch>='0') && (ch<='9')) ) /* 数字字符 */

  {

  do_something(ch);

  }

  常量用宏替代,这样的代码意图会比较清晰。

  后来他感觉,还是有些不妥。干脆又改了下,最后变成这样。

  #include

  ……

  if ( (stat == MODE_NAME_1) || (stat == MODE_NAME_2) \

  || is_digit(ch) )

  {

  do_something(ch);

  }

  is_digit的加入,使得代码与注释浑然天成。

  后来他在优化过程中发现,ch的值在99%的情况下都满足'0'~'9',

  这个时候,这段代码又会被优化成这样的。

  if (is_digit(ch))

  {

  do_something(ch);

  }

  else if ((stat == MODE_NAME_1) || (stat == MODE_NAME_2))

  {

  do_something(ch);

  }

  else

  {

  /*已考虑无误*/

  }

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


4.没有不明何意的常量。


常量的含义,通常只有原创者才知道。


如果没有特别的说明,没有一定的经验,这个程序回头在阅读时就难以看懂。


求哪位高手来一段鲜明对比的源码吧?


5. if 必有else,switch 必有default。


在他的程序里你不会看到一个单一的if语句,哪怕else确实什么都不需要处理,你也会看到这样的代码


  if (is_condition_true())

  {

  do_something();

  }

  else

  {

  /* do nothing */

  }

  因为,在多年的工作经验中,他发现,系统的崩溃,多数死在else里面。这样的代码,告诉别人也告诉自己,此处的else是经过充分考虑,的确没有需要处理的。下次自检程序时,此处就可以快速跳过。

  同样的道理,每一个switch,其default,也是经过深思熟虑的,充分防错。

  switch (state)

  {

  case STATE_XXXX:

  break;

  case STATE_YYYY:

  break;

  ........

  default:

  /* do nothing */

  break;

  }


分享!

嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论
热门推荐
相关推荐
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦