簡體   English   中英

if語句中有多少組合

[英]How Many Combinations In This If Statement

好吧-我有一個和我一起工作的人,寫過這樣的東西

if()
   if()
      if()
         if()
         if()

我不喜歡這樣!

如果有十個不同的布爾標志,那么有多少個組合?

10階乘?

我試圖解釋為什么這很糟糕

2十分之一度= 1024

我試圖解釋為什么這很糟糕

這不一定是壞事。 每種情況都切除了一半的病例。 如果您知道只在第一個條件為真時才需要做某事,那么您已經丟棄了512個案例。 那就是這些檢查的重點。

但是,您可以將其重寫為更好看和可讀性:

if(c1 && c2 && c3 && c4 && c5)

每個標志和10個標志兩個狀態意味着2 ^ 10 = 1024

由於這個確切的原因,大多數好的靜態代碼分析器都具有最大程度的縮進。 使用如此高級別的嵌套來處理所有邏輯情況變得非常困難。

這是一次典型的新手錯誤,即一次檢查一次函數頂部的所有錯誤條件嗎?

如果是這樣,您可能希望讓代碼的創建者將其更改為一系列if語句,而不是此高度嵌套的構造。

if(error1) {
    /* report error 1 and exit */
}

if(error2) {
    /* report error 2 and exit */
}

if(error3) {
    /* report error 3 and exit */
}

...

使測試代碼和提供有關特定錯誤的量身定制的信息變得容易得多,而不是一個通用的“不好的事情”語句。

最多2 ^ 10 = 1024條路徑(如果條件完全獨立,則達到最大值)

在一種方法中具有許多路徑被稱為具有高復雜度。 這種高復雜性會影響可維護性和可測試性。 顯然,復雜的方法更容易出錯,並且難以測試和維護maintanin。

復雜性並不一定是問題:某些問題的解決方案具有無法消除的固有復雜性。 換句話說,某些問題絕對很難找到解決方案。 在這些情況下,您可以通過將復雜的方法拆分為較小的方法來降低局部復雜性(這顯然不會降低全局復雜性)。

在其他情況下,消除了額外的復雜性:找到一個更簡單的解決方案(我很容易說);-)

暫無
暫無

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

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