V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjsxwc
V2EX  ›  程序员

与其说动态类型语言代码不易维护, 不如说带有副作用功能逻辑混在一起的代码不易维护

  •  
  •   zjsxwc ·
    zjsxwc · 133 天前 via Android · 1377 次点击
    这是一个创建于 133 天前的主题,其中的信息可能已经有所发展或是发生改变。
    从帖子 https://v2ex.com/t/1056990
    吐槽说弱类型代码不易维护启发。

    python 的 list-dict ,php 、js 的 array ,都能往里面塞各种类型任意对象。这时候就是一种功能逻辑实现混淆副作用。
    于是,有经验的动态类型语言程序员,都会有“防御型”编程的习惯,比如在编写代码之前先检查校验一遍传入数据的类型是否符合接下来要编写代码的数据类型要求。

    这是很容易解决的,真正麻烦的是遇到功能实现混淆在一起时硬耦合的情况,就像一个有聊天与截图功能硬耦合的软件,当我单纯只想要截图功能时还是不得不附带安装这个聊天功能一样恶心。比如处理订单导出需要遍历订单数据,处理订单不同用户但同一小区地址合并数据的逻辑也需要遍历订单数据,于是程序员决定在处理订单导出的遍历里也处理订单小区地址合并数据,遇到特殊情况特殊处理,然后他就写了一堆特殊处理的代码,这就是让人恶心的功能实现混淆达成了硬耦合。

    强类型静态类型都会有这些问题,还很常见,解决办法没有银弹,只能是 code review ,与经常性重构,才能保证代码不会腐败。

    如果说接过的多手代码,从不重构,已经完全腐败,无法重构,那确实除了屎上雕花,祈祷不出 bug ,没有别的办法。
    2 条回复
    skuuhui
        1
    skuuhui  
       132 天前
    python 是强类型。
    确实和语言没关系。
    对各有千秋吧,中国的商业环境似乎很多更加看重快。如果一个垃圾项目能活到无法维护的地步,那基本说明这个项目是已经成功了,那更说明在当时场景下,这种快速开发方式或许是正确的。对老板来说,只要我花钱,无论是维护也好重构也好总有人能做的不是吗?
    dongzhuo777
        2
    dongzhuo777  
       132 天前
    java 的 array 也是可以塞任意对象的啊,只不过加上泛型在编译校验了,底层还是可以随便你塞什么的。。
    这种就是语言灵活性,有些语言是适合自己写不适合大规模团队协作的。
    比如 C/C++的指针满天飞,换个人来都不知道在干嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   881 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.