亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將代碼保留為嵌套 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 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號