博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
程序出现这样的问题,到底是谁的责任?
阅读量:6256 次
发布时间:2019-06-22

本文共 1239 字,大约阅读时间需要 4 分钟。

前一段时间,在项目里遇到这样一个问题。

我提供了一些函数,比如A(),B(),C().....。之后其他人根据具体情况调用不同的函数。这些函数有一个

共同点,就是调用方式非常相似。

使用者可能会这样使用这些函数

if(condition == 1) A();

else if(condition == 2) B();

else if(condition == 3) C();

else ...

现在是看不出来有什么问题。但是问题在于调用函数没有这么简单,举一个复杂点的例子。

使用者可能这样使用

if(condition == 1)

{
  do{
    if(condition2) break;
    A();
    if(condition3 && condition4)
    {
      //do some code...
    }
  }while(condition1)
}
else
if(condition == 2)
{
  do{
    if(condition2) break;
    B();
    if(condition3 && condition4)
    {
      //do some code...
    }
  }while(condition1)
}
else ...

以上只是为了说明,每种情况的处理方法都差不多,但是都很复杂,有那么多得条件和操作。

现在出现问题了,调用者总会用错这些条件,比如condition2成立应该跳出循环,但是忘记break了。

或者又有其它的一些错误。总之即使调用A的情况弄对了,有的时候就偏偏忘记改调用B的那段代码。

导致问题总是接连不断的出现。

当然,有人说了,你这个明显有重复代码,改成参数化不就行了。

可以改成这样:

void func(int condition)

{
  if(condition == 1) A();
  else
  if(condition == 2) B();
  else
  ...
}

之后上面那段洛里啰嗦的代码就可以这样改

do{
  if(condition2) break;
  func(condition);
  if(condition3 && condition4)
  {
    //do some code...
  }
}while(condition1)。

但是关键的这个func函数应该由谁来提供呢?一开始我只是提供了A,B,C...这些函数,我本以为使用者

可以自己写一个func函数,但是我错了,使用者并没有这么做,而是赤裸裸的按照最笨的那种方法。当我

发现时,已经晚了,程序中到处都是这样的代码,以至于我苦不堪言。虽然单独提供A,B,C...可以使程序

更加灵活(万一使用者对函数有了不同的使用情况),但是到现在为止没有出现什么特例的使用情况。

而我也非常后悔,为什么自己不在当初提供一个参数化的方法。

 

转载地址:http://hfnsa.baihongyu.com/

你可能感兴趣的文章
Oracle分页
查看>>
简单介绍JS/JQuery绑定事件的几种方式
查看>>
如何使用Pig集成分词器来统计新闻词频?
查看>>
elasticsearch里面bulk的用法
查看>>
openerp 翻译问题
查看>>
oracle表连接方式对比实例
查看>>
RabbitMQ安装(CentOS 7 64位)
查看>>
Tomcat不同版本所对应的Servlet/JSP规范
查看>>
Spring初始化完成后直接执行一个方法,初始化数据
查看>>
windows下添加ubuntu引导 教程
查看>>
Java正则零宽断言出现PatternSyntaxException异常
查看>>
sqlyog快捷键
查看>>
一花一世界 一叶一菩提
查看>>
jenkins token-macro 导致docker API连接 Test失败
查看>>
UIKit框架介绍
查看>>
Ubuntu锐捷上网问题
查看>>
storm(2)-基于k8s的安装
查看>>
数据库读写分离
查看>>
谈谈KMP算法
查看>>
知道这20个正则表达式,能让你少写1,000行代码
查看>>