检查新同事的代码时发现的问题
今天看了一个组员的代码,他是今年才毕业的。在应届毕业生中,他的能力算是相当不错的了,所以我们才破格录用,并准他一个月假期回去答辩毕业论文。在他的代码中,发现几个问题,其中一些颇具代表性,把它们记下来供新手参考。
函数原型中没有参数名。比如,一个函数原型为int foo(const char*buff, size_t buff_length)的函数,他写成了int foo(const char*, size_t)。其实这也不怪他,很多教材上都是这样写的。教材上为什么这样写呢?原因很简单:替编译器着想。编译器在编译时,会把函数的参数名放进符号表中,这会带来空间和时间上的开销。早期硬件资源紧张,函数原型里不写参数名,可以得到类型检查的好处,同时可以把代价减到最小。如今,这种为编译器着想的作用微乎其微了,现在函数原型起的是文档作用,给人看的,所以参数名不能省略,否则谁知道怎么调用。
代码排版夹杂TAB键和空格。换一个编辑器,甚至同是VIM,只是设置不一样,显示效果变得乱七八糟。在学校里写代码,一般都只是自己看,同一种编辑器的同一种设置,效果自然是一样的。工作时写的代码,不光自己看,同事也会看。不能要求同事的编辑器和你的一样,设置也一样。当然,到底是用TAB键还是用空格来缩进,很难说谁好谁坏,不过你只能选择其一,并且至少在同一个文件中保持一致。
不清楚何时把代码抽出来创建一个新函数。我发现其中一个函数完成了好几个功能,我问他为什么不把那些代码作为几个单独的函数。他说,那个函数不长啊。那个函数是不长,100行都不到。我告诉他,一段代码是否应该作为一个单独的函数,不是看它有多长,而是看它逻辑上的功能是否独立,表达的意义是不是清晰。有时为了让一个表达式具有清晰的意义,一行代码都可以作为一个单独的函数。
刚毕业时,就养成一个好的编程习惯是很重要的。不要以为这只是一些小问题就不在意,注意这些问题,不但会给别人留下好的印象,同时也会提高自己的工作效率。