簡體   English   中英

簡化if else語句

[英]simplify if else statement

我有一些功能取決於許多條件。 條件語句中的所有變量都是布爾變量,代碼如下,我不喜歡它:

    if (userHasMoreThanOneMarket && isOnlyMarketSelected || !userHasMoreThanOneMarket && userHasMoreThanOneAgency) {
        if (isOnlyAgencySelected) {
            //do case 1

        } else if (noAgencySelected && isOnlyMarketSelected) {
            //do case 2
        }
    }

有沒有辦法使它更容易理解和更好?

這與使用JavaScript一樣簡潔。 我想如果您真的想要,可以創建變量來存儲二進制選項:

var multiMarketOneSelected = userHasMoreThanOneMarket && isOnlyMarketSelected;
var singleMarketMultiAgency = !userHasMoreThanOneMarket && userHasMoreThanOneAgency;

if (multiMarketOneSelected || singleMarketMultiAgency) {
    if (isOnlyAgencySelected) {
        //do case 1

    } else if (noAgencySelected && isOnlyMarketSelected) {
        //do case 2
    }
}

雖然我真的不知道您是否從中獲得了更多的可讀性。

您的代碼看起來不錯,但是如果您不喜歡它,則可以執行以下操作(請注意,如果您更喜歡它,這里唯一的改進就是樣式):

function check(){
    return {
        valid: userHasMoreThanOneMarket && isOnlyMarketSelected || !userHasMoreThanOneMarket && userHasMoreThanOneAgency,
        case: [
           isOnlyAgencySelected,
           noAgencySelected && isOnlyMarketSelected
        ]
    };
}

var conditions = check();
if (conditions.valid) {
    if (conditions.case[0]) {
        //do case 1
    } else if (conditions.case[1]) {
        //do case 2
    }
}

我會嘗試使代碼更具可讀性的一些事情:

  1. 初始化變量的方式不必再次取反。 所以!userHasMoreThanOneMarket成為userHasOneMarket
  2. isOnlyMarketSelected對我來說似乎是多余的。 您正在外部的if子句和內部的if子句中進行檢查。
  3. 在此代碼段上方,您可能有很多代碼可以初始化和設置所有這些布爾值。 嘗試return; 每個變量之后的語句以消除if條件。

我希望這有幫助。

暫無
暫無

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

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