调用其他函数时减少if语句

c83*_*830 4 c#

我有一个函数从不同的对象调用许多其他函数.在调用下一个函数之前,每个函数都必须返回true.正如您所看到的,我使用了太多if语句.如何改进代码并使其更整洁?谢谢

bool ISOKToDoSomthing()
{
    boo retVal = false;

    retVal = ObjA.CheckVersion(oldVersion);

    if(retVal)
    {
         retVal = objB.CheckUserRight();
    }

    if(retVal)
    {
          retVal = ObjC.ISDBExist();
    }

    if(retVal)
    {
          retVal = OjbD.ISServerUp(ServerName);
    }
    //tons of similar code as above
    ......... 
    return retVal;
 }
Run Code Online (Sandbox Code Playgroud)

And*_*rey 9

return 
    ObjA.CheckVersion(oldVersion) &&
    objB.CheckUserRight() && 
    ObjC.ISDBExist() && 
    OjbD.ISServerUp(ServerName);
Run Code Online (Sandbox Code Playgroud)


Eri*_*ert 8

我的建议:如果没有明确的商业案例进行更改,请不要对此代码执行任何操作.

您的代码清晰,明显,可能正确,易于维护且易于调试.为什么你想要以任何方式改变它?花时间通过修复错误和添加功能来增加价值,而不是通过不必要地更改工作代码.当你的老板问你"你今天做了什么?" 答案不应该是"我通过对正确的,有效的,已经调试过的代码进行不必要的修饰来增加我们的进度风险".

现在,如果这里确实存在问题,问题可能不是代码难以阅读,而是代码严格地编码应该是用户可配置的业务流程.在这种情况下,创建一个名为"Workflow"的对象,该对象编码业务流程,以及一个评估任意工作流的引擎.然后根据用户的输入构造该对象的实例,该实例表示所需的工作流.

这实际上为用户增加了价值; 用户不关心是否使用嵌套的"if"语句.


cHa*_*Hao 6

if (!ObjA.CheckVersion(oldVersion)) return false;
if (!ObjB.CheckUserRight()) return false;
if (!ObjC.IsDBExist()) return false;
if (!ObjD.IsServerUp(serverName)) return false;

... your other checks ...

return true;
Run Code Online (Sandbox Code Playgroud)

短路&&对于一些条件是有用的,但是如果你有"吨"的话,IMO太过于试图坚持一个声明.

但是,两者的结合可能是有用的.更有用的是将这些检查中的一些压缩成更大的块(但小于IsOKToDoSomething).例如,检查您是否有权访问数据库(是否存在,是否可以登录,等等)

说实话,事实上你有很多物品要检查设计问题的提示 - 也就是说,你试图一次做太多,或者你的某个地方有一个"神物"系统方面.你可能想看看修复它.


小智 5

return ObjA.CheckVersion(oldVersion) && objB.CheckUserRight() && ObjC.ISDBExist() && OjbD.ISServerUp(ServerName)
Run Code Online (Sandbox Code Playgroud)