为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只名叫tom的猫 2023-08-04 16:22:08
我完成了课堂编码作业,一位朋友给了我反馈,嵌套的 if 语句可能看起来比 switch 语句好得多我尝试将其转换为开关,但即使不是更多工作,它似乎也差不多。//this is the absolute basic frame of the code createdif(arg){    //code    if(arg){        //code        if(arg){            //code        }        else if(arg){            //code        }    }    else if(arg){        //code    }else if(arg){    //code}如果将其转换为 switch 语句,它会更容易、更好看吗?或者如果不是更糟糕的话,它会是相同的吗?
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

从干净代码的角度来看,这两个选项(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(); 
}

这就对了!当前代码的真正问题是它在一个地方做了很多事情。对此的“干净代码”解决方案是将代码移动到不同的帮助器方法中,这些方法具有很好的说明性名称,并且执行的操作要少得多。


查看完整回答
反对 回复 2023-08-04
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

无论哪种方式都可以争论——如果它像这样适合你,我就不会太担心。Switch 语句将使代码看起来像这样


switch(var1)

case 1:

{

//code

switch(var2)

  case 1: 

  {

   //code

  }

    switch(var3)

    case 1:

    {

        //code

        }

    case 2:

    {

        //code

        }

  }

  case 2:

  {

    //code

  }

case 2: {

//code

}

无论哪种方式你绝对可以让它工作


查看完整回答
反对 回复 2023-08-04
  • 2 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信