`
阅读更多

记得刚参加工作不久,我写了一个工具,是从文档自动生成代码的工具。那时候比较笨,虽然学了Python,但是完全没想到用Python实现这个工具,是用C++写的。工具很简单,但是帮了我很大的忙。后来找同事Review代码,他给我提了一个中肯的建议。他说,在C/C++里面,应该写成:

if (NO_RESULT == rst)

不应该写成:

if (rst == NO_RESULT) // 因为你很容易就会写成 rst = NO_RESULT

我觉得他讲的很有道理啊,于是我把我C++的风格都改成了这种,连Java的都改了(我知道Java里面不会有这个错误,除非正好你的rst是boolean类型的)。可是一两年之后,我发现这种写法非常不舒服,因为它违反了我整个代码的风格,就是变量写前面,常量写后面。什么意思呢,如果我写:

if (rst < SOME_CONSTANT),而不会写

if(SOME_CONSTANT > rst),谁都知道他们是一样的。可是,绝大部分人写代码读代码都喜欢前一种,为什么?

因为思维正常。于是我把我所有的写法(包括今后在项目中,在iPHone中写的),都是

if (rst == NO_RESULT)。这样改了之后,我确实碰到过一次写错了,可能是写快了,少写了一个=号,不过马上有编译器的warning。我想说得就是,也许无数牛B的编码规则说,请写if (NO_RESULT == rst),但是其实这是不对的,因为虽然你可能可以避免极少的错误,但是你却让读代码(包括写的人)很不爽,不适应。这个教条我觉得应该废除,因为当你习惯==之后,几乎是不会犯错的。

 

   另外还有些教条,我们一定要搞清楚意思。

 

   goto是魔鬼,这不是本意,本意是goto有风险,当goto(label)太多了,有问题。那么你封装好一个代码,从最里面的循环退出,用一句goto,绝对没有问题,而且是最好的结构,比你用任何方法都好(可能有很多人会说,你应该重构代码,取消那么多层循环,可是也许用多层循环是最好的表达方式,没法重构)。那么,那么就用一个goto吧。我见过牛人的代码,有goto,没有重构。代码很好懂。但是人家几千行代码就1,2处goto,而且写了注释,非常清晰。

 

    do while。这个一定要少用,因为正常人做事情都是习惯写while的。但是不表示不可以用,少数地方用了,也没什么问题。当然了,do while很容易被while等价取代。其实不是,是因为95%的情况while都比do while适用。但是你应该明白,这个是可以用的,只要不要滥用。否则为什么那么多语言留着它。我还可以告诉你,ruby还有这么用的, do something until condition。

 

     所以我想说的是,不要教条。我觉得写代码这么久,下面这些是我觉得比较真理的:

1. 减少重复你自己;

2. 多用库, 多用成熟的库;

3. 多写测试;测试要快速,重用,自动。

4. 一开始捡起一个大致正确的设计,多次重构,但是不要伤筋动骨。如果要大重构,可能还是重写比较好

5. 注释一定要越少越好,最好的代码是不需要注释的。这不是说鼓励你不写注释,而是鼓励好的注释和好的代码结构

6. 不要滥用设计模式 

7. 少用高明的算法

8. 注意基本:数据类型,是不是溢出啊,是不是死锁啊,注意会不会空指针

9. 找一个负责又有水平的人review你的代码

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics