重構——改寫 if else 邏輯

繁多的 if else,if 中的 if else,else 中的 if else,這些龐大的邏輯看上去就讓人云山霧繞,是時候祭出重構公式來簡化它了。

思路

重構的思路為:

if 和 else 的邏輯我們只能二選一

對于 if,我們可以在 if 的邏輯塊里加上一個 return,表明執(zhí)行完 if 之后,不再涉及 else 的代碼;對于 else,由于之前已確保 if 的邏輯執(zhí)行后會返回,我們大可放心地將 else 的代碼提出來,去掉 else 這個關鍵字

實戰(zhàn)

一個例子

if ( m_Prop.A == 1 ) {
    if ( m_Prop.B == 1 ) {
        return "Good";
    } else if ( m_Prop.B == 2 ) {
        return "Not too bad";
    } else {
        return "Just so so";
    }
} else if ( m_Prop.A == 2 ) {
    if ( m_Prop.B == 1 ) {
        if ( m_Prop.C == 1 ) {
            return "Need improvement";
        } else {
            return "Need more improvement";
        }
    } else if ( m_Prop.B == 2 ) {
        return "Have a chance to improve";
    } else {
        return "Too bad";
    }
}

先從最外層的 else if ( m_Prop.A == 2 ) 開始修改,去掉 else

if ( m_Prop.A == 1 ) {
    if ( m_Prop.B == 1 ) {
        return "Good";
    } else if ( m_Prop.B == 2 ) {
        return "Not too bad";
    } else {
        return "Just so so";
    }
} 

if ( m_Prop.A == 2 ) {
    if ( m_Prop.B == 1 ) {
        if ( m_Prop.C == 1 ) {
            return "Need improvement";
        } else {
            return "Need more improvement";
        }
    } else if ( m_Prop.B == 2 ) {
        return "Have a chance to improve";
    } else {
        return "Too bad";
    }
}

然后以此類推,得到如下代碼

if ( m_Prop.A == 1 ) {
    if ( m_Prop.B == 1 ) {
        return "Good";
    }
    
    if ( m_Prop.B == 2 ) {
        return "Not too bad";
    }
    
    return "Just so so";
} 

if ( m_Prop.A == 2 ) {
    if ( m_Prop.B == 1 ) {
        if ( m_Prop.C == 1 ) {
            return "Need improvement";
        }
        
        return "Need more improvement";
    }
    
    if ( m_Prop.B == 2 ) {
        return "Have a chance to improve";
    }
    
    return "Too bad";
}

就這樣,去掉了 else,代碼看起來清晰了很多,心情也變好了。

好處

  1. 可讀性

    當函數中出現任一一個 return,意味著分支到此為止。這樣一個個 return,將一塊塊的邏輯分支分段。讀代碼的人只需專心理解每一段的邏輯,而不必耗費精力去深挖該段邏輯之后是否還有額外的處理——因為我們代碼已經 return 了。

  2. 避免修改

    當然,我們也可以在每個分支的結尾,將返回值賦給一個變量,在函數的末位返回這個變量。這樣保證了函數只有一次返回,并且該處還可以做一些諸如異常捕捉的統(tǒng)一處理。

    但是,這樣就沒法保證,這個作為返回值的變量,不會再后續(xù)的處理中被意外地修改。俗話說:夜長夢多。還是該出手時就出手,能返回就返回。

參考來源

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 哼著熟悉的小調 腳下是熟悉的小路 身邊的人早已不再熟悉 或者說 沒有人 拿著空空的酒瓶 裝著空空的大腦 心雖然不空...
    輾轉流年誰許誰壹丗安好閱讀 249評論 0 0
  • 這篇文章,是我基于老貓在一塊聽聽上分享的《撥開區(qū)塊鏈“錢包”的層層迷霧》語音,整理出來的文字內容。因為我也才接觸到...
    幾唯Kiwi閱讀 1,535評論 0 2
  • 一個人的成長離不開環(huán)境、思維和平臺,我的成長如出一轍。 我們這些60年代出生的,經歷比較多,也算是趕上了好時代。...
    喝酒的鋼鐵漢子閱讀 494評論 0 1
  • 文/LILI 體驗過血脈噴張的沖動,參與過暴力殘忍的搏斗,販過毒殺過人,逃過獄襲過警,做過壞事,當過壞人,從杰伊到...
    LILI是個傻狍子閱讀 447評論 3 6

友情鏈接更多精彩內容