那些烂代码教给我的事

来源:互联网 发布:canny边缘检测算法 编辑:程序博客网 时间:2024/04/30 20:13
(以前的博文,转到csdn上来)
如果作为一个程序员,你对我写的东西不感兴趣,可以直接跳到最后一句。

这周三的时候,我还是跟往常一样在做我的事,偷偷摸摸学点儿ror。一个老师让一个同学叫我过去帮忙看程序,说是程序编译不通过。。。
先说明,这个项目组的项目是一个地质相关的绘图软件,大部分的程序设计到石油数据,和一些计算机图形学的东西,是跟中石油合作的,有大概8、9年的样子了,无测试。几十万行代码应该是有的。

我看了下编译出现的状况:omg!!!几百个编译错误。旁边的同学倒是很淡定,熟练的注释掉了几个看样子是新写的文件。。。
恩,这下子好点儿了,说是有两个类型重复定义了:

我:如果没有测试,再怎么也应该添一个文件就编译一次吧!
老师:这个不是关键,关键是这个重复定义的数据,搞得很老火阿!

好吧

大概是这样的代码出现了问题(我精简了):

DataTypeA和DataTypeB是定义在两个不同的头文件中的enum类型,代表同样的物理意义的数据。。。有一些文件会同时包含这两个头文件

我:为什么有两个不同类型的数据表示了同一个东西?
老师:A是在原来的程序里面定义的数据结构,B是我们新写的库,我们不希望新的库依赖于老的程序。。。这样我们可以不断的添加新的库实现新的功能。。。
我(心中OS):真的就不依赖了吗?

才开始我没有注意到一个命名是DataTypeA,另一个是DataTypeB。我以为都是A,就随便加了个ifndef,期待速度解决问题。。。结果是,,,不行。。。holy shit!。。。

怎么A中的VERTICAL会根B中VERTICLAL冲突呢?

这项目真心太大了,编译都要好久,我就写了个小demo,来速度验证这个语法问题。恩。还是不行,看来是语法问题。。。

后面通过查资料,我才知道enum属于POD(plain old data)。。。enum的类型名称是没有名字空间的。。。

好吧,问题找到了。。。

为什么会叫坏代码教给我的事呢?因为我觉得正常情况下,我是不会用enum的。为什么?

我问了那个同学一个很简单的问题:你们会不会在某个地方判断enum类型的值是VERTICAL还是HORIZON,然后再根据判断的结果,进行不同方法的计算?
同学:会啊
我:会不会这样的判断不止一处?
同学:恩,是的。
我:有没有针对VERTICAL或者HORIZON的一些算法改变?
同学:有
我:你有没有觉得你改的时候很苦B?
同学:有有有!!!同学恍惚遇到知音了。。。


为什么不用enum的原因我也就差不多解释了一半了。
最重要的一点:

好的代码锻炼人的思考,坏的代码锻炼人的语法

原创粉丝点击