将代码保留为嵌套 if 语句或尝试转换为一个或多个开关会更容易吗

我完成了课堂编码作业,一位朋友给了我反馈,嵌套的 if 语句可能看起来比 switch 语句好得多


我尝试将其转换为开关,但即使不是更多工作,它似乎也差不多。


//this is the absolute basic frame of the code created

if(arg){

    //code

    if(arg){

        //code

        if(arg){

            //code

        }

        else if(arg){

            //code

        }

    }

    else if(arg){

        //code

    }

else if(arg){

    //code

}

如果将其转换为 switch 语句,它会更容易、更好看吗?或者如果不是更糟糕的话,它会是相同的吗?


一只名叫tom的猫
浏览 107回答 2
2回答

繁花不似锦

从干净代码的角度来看,这两个选项(if/else 或 switch)都不是优选的。但在没有更多背景的情况下解决这个问题是不可能的。首先,真正的问题是示例代码中的方法必须查看如此多的参数。函数的理想参数数量为零 (niladic)。接下来是一个(一元),紧接着是两个(二元)。应尽可能避免三个参数(三元组)。超过三个(多元)需要非常特殊的理由,然后无论如何都不应该使用。换句话说:您努力编写参数尽可能少的方法。因为每个参数都可能增加对此类 if 或 switch 对比的需求。当多个 switch 语句适合您时,一种潜在的途径可能会转向多态性。OOP 中切换的“正确”方法是使用不同的类,并使用运行时多态性来确定在运行时实际调用哪个方法。鉴于添加的上下文:ug = input.nextLine(); if(ug.equals("U") || ug.equals("u")) { ...干净的代码解决方案可以是这样的:ug = input.nextLine(); if (ug.equalsIgnoreCase("u")) {   fetchValuesForUndergraduate();  }这就对了!当前代码的真正问题是它在一个地方做了很多事情。对此的“干净代码”解决方案是将代码移动到不同的帮助器方法中,这些方法具有很好的说明性名称,并且执行的操作要少得多。

米琪卡哇伊

无论哪种方式都可以争论——如果它像这样适合你,我就不会太担心。Switch 语句将使代码看起来像这样switch(var1)case 1:{//codeswitch(var2)  case 1:   {   //code  }    switch(var3)    case 1:    {        //code        }    case 2:    {        //code        }  }  case 2:  {    //code  }case 2: {//code}无论哪种方式你绝对可以让它工作
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java