• [置顶] 那些烂代码教给我的事


    (以前的博文,转到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的原因我也就差不多解释了一半了。
    最重要的一点:

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

  • 相关阅读:
    winfrom绘制渐变 / 调用浏览器访问指定地址
    解决sever 2008中tomcat的报错 init Failed to initialize end point associated with ProtocolHandler ["http-nio-80"]
    SizeGripStyle 枚举
    不安全代码只会在使用/unsafe 编译的情况下出现
    VS2017自定义代码片段, 实现快捷输入
    C#获取程序代码执行时长
    C#简单操作XML
    数据库基线检查工具DB_BASELINE
    SQLmap使用手册小结(二)
    SQLmap使用手册小结(一)
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206865.html
Copyright © 2020-2023  润新知