热度 34
2013-12-25 00:27
1739 次阅读|
9 个评论
3.空格、换行、常量替换、{}保护、还有效率。 if((long_state_var==1)||(long_state_var==2)||((ch0x2F)(ch0x3A))) do_something(); 看到这种代码,他就感觉 浑身难受、头晕恶心 ….. 狂吼一声,这段代码立马会给改成这样。 if ((long_state_var==1)||(long_state_var==2) \ ||((ch0x2F)(ch0x3A))) { do_something(); } 长字符行要换行,模块要添加{} 保护,这是做人的底线。 再瞄一眼,会发现没有空格也很让人难过。 赶紧快速编辑了而下,舒了口气。 if ( (long_state_var == 1) \ || (long_state_var == 2) \ || ((ch0x2F) (ch0x3A)) ) { 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 { /* 已考虑无误 */ } 为了效率,可以牺牲一点代码可阅读性。