zoukankan      html  css  js  c++  java
  • “坏”代码是怎么生成的(2)

    今天接着改bug,先看下面一段代码:

    1 public bool IsApple(string fruitName)
    2 {
    3   return !fruitName.Contains("Orange") && !fruitName.Contains("Banana");
    4 }

    什么什么?不是橘子也不是香蕉的水果就是苹果?小孩子也知道这个逻辑有问题。但是,在我们的代码中却真实存在这样的逻辑。要判断某个对象是否属于某种类型时,不是直接判断其是否具有某种属性,而是通过“排除法”来判定。

    为什么会出现这样的代码?在最初的代码里,程序只需要处理Apple和Orange两类水果,所以程序员A写出了如下代码:

    1 public bool IsApple(string fruitName)
    2 {
    3   return !fruitName.Contains("Orange");
    4 }

    过了一段时间,需求有了变化,程序需要处理Banana。此时程序员B发现函数IsApple()存在问题,于是将它更新成了代码片断1的那个样子。

    如果程序员A将最初的代码写成如下:

    1 public bool IsApple(string fruitName)
    2 {
    3   return fruitName.Contains("Apple");
    4 }

    这样的话程序员B就不会在这段代码基础上画蛇添足了。

    再进一步,如果程序员A考虑到,为什么要通过一个名字fruitName来判断其类型呢?将Apple实现成Fruit的子类,以后需求变化需要支持Orange, Banana时再添加对应的子类不就可以了吗?

  • 相关阅读:
    团队选题报告
    结对编程作业服务器端总结
    结对编程作业服务器端系统设计、玩法和接口简要
    第一次团队展示
    第一次个人编程作业技术助教总结
    第一次个人编程作业输入输出格式及注意事项
    第一次博客作业
    课程总结
    团队作业-个人总结
    团队作业总结
  • 原文地址:https://www.cnblogs.com/susy/p/1926866.html
Copyright © 2011-2022 走看看