簡體   English   中英

比使用多個 if 更好的方法

[英]Better way than using multiple if

我有一個簡單的問題:我需要擲兩組骰子。 對於第一卷中可能出現的每個數字,都有一組條件,然后我會對照第二卷進行檢查。 每個卷的條件是不同的。

對我來說,問題是這樣的事情重復了大約 30 次,這在我的代碼中似乎是一件很糟糕的事情:

    if (roll == 3) {
        if (secondRoll < 5) {
           do this
        }
        else if (secondRoll > 5 && secondRoll < 10) {
           do this
        }
        else {
           do this
        }
    }

    if ...... and so on

那我該怎么辦? 有沒有更優雅的方法來做到這一點? 我想過這樣的事情:

    class Result {
        constructor(firstRoll, secondRollMin, secondRollMax, output) {
            this.firstRoll;
            this.secondRollMin;
            this.secondRollMax;
            this.output;
        }
    }

然后根據一組對象中的匹配屬性檢查卷,但我不確定這是否真的更好。 任何想法將不勝感激。

只是一個小改進,但您只需要檢查每個子序列中范圍的上限, else if

if (roll == 3) {
    if (secondRoll < 5) {
       do this
    }
    else if (secondRoll < 10) {  // secondRoll must be >= 5 already
       do this
    }
    else {
       do this
    }
}

使用Switch來簡化

switch (roll) {
    case 1-4: 
        // Do something.
        break;
    case 5-8: 
        // Do something.
        break;
    case 9-11: 
        // Do something.
        break;
    default:
        break;
}

為組合創建一個鍵和更簡單的if/else怎么樣? 您可以組合任何具有相同作用的組合。

const combo = `${roll}-${secondRoll}`;

if (['1-1', '1-2', '1-3', '3-4', '3-5', '3-6'].includes(combo) {
  // Do this
} else if (['1-4', '1-5', '1-6', '3-1', '3-2', '3-3'].includes(combo) {
  // Do this
// ...
} else if (['6-4', '6-5', '6-6'].includes(combo) {
  // Do this
}

或創建一個switch/case

const combo = `${roll}-${secondRoll}`;

switch (combo) {
  case '1-1':
  case '1-2':
  case '1-3':
  case '3-4':
  case '4-5':
  case '5-6':
    // Do this
    break;
  case '1-4':
  case '1-5':
  case '1-6':
  case '3-1':
  case '4-2':
  case '5-3':
    // Do this
    break;
  // ...
  case '6-4':
  case '6-5':
  case '6-6':
    // Do this
    break;
}

您可以嘗試混合使用 if、else 和 switch 塊。 您可以根據第一次滾動使用不同的方法進行調用。 switch 語句通常比一組嵌套 if 更有效。

class Result {
        constructor(firstRoll, secondRollMin, secondRollMax, output) {
            this.firstRoll;
            this.secondRollMin;
            this.secondRollMax;
            this.output;


            switch(firstRoll){
                case 1:
                    this.output = oneToXTime(secondRollMin,secondRollMin)
                    break;
                case 2:
                    this.output = twoToXTime(secondRollMin,secondRollMax)
                    break;
                case 3:
                    this.output = threeToXTime(secondRollMin,secondRollMax)
                    break;
                case 4:
                    this.output = fourToXTime(secondRollMin,secondRollMax)
                    break;
                case 5:
                    this.output = fiveToXTime(secondRollMin,secondRollMax)
                    break;
                case 6:
                    this.output = sixToXTime(secondRollMin,secondRollMax)
                    break;
            }
        }

          static String oneToXTime(secondRollMin,secondRollMin) {
            String result = ""

            if (secondRollMin < 5) {
               result = "My result"
            }
            else if (secondRollMin < 10) {
                result = "My result 2"
            }

            return result
        } 

         static String twoToXTime(secondRollMin,secondRollMin) {
            String result = ""
            if (secondRollMin < 5) {
               result = "My result"
            }
            else if (secondRollMin < 10) {
                result = "My result 2"
            }
            return result
        } 

         static String threeToXTime(secondRollMin,secondRollMin) {
          // Same as above...
        } 

        static Stfing fourToXTime(secondRollMin,secondRollMin) {
          // Same as above...
        } 

        static String fiveToXTime(secondRollMin,secondRollMin) {
          // Same as above...
        } 

        static String sixToXTime(secondRollMin,secondRollMin) {
          // Same as above...
        } 

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM