2016-02-23 19 views
0

代碼這段代碼使用switch-case,如果還有其他的,哪個更好?

if ([@[@1,@2,@3] containsObject:@(section)]) { 
    return 10; 
}else if ([@[@0,@4] containsObject:@(section)]) { 
    return 15; 
}else { 
    return 0; 
} 

& &

switch (section) { 
    case 0: 
     return 15; 
    case 1: 
     return 10; 
    case 2: 
     return 10; 
    case 3: 
     return 10; 
    case 4: 
     return 15; 
    default: 
     break; 
} 
return 0; 

我想知道這是在許多更好的方式(代碼行,運行效率......)

我喜歡迅速的開關情況。 .....

+0

當選項數量相對較少時,交換機會更好。 if語句很難閱讀,創建一個'NSArray'只是爲了查看列表中是否有值是很大的開銷。如果有幾十個或更多的選項,由於可讀性,'NSArray'方法更好。 – Avi

回答

6

開關情況總是更好,效率最高,因爲所有條件在編譯時都是靜態分配的,並且不需要運行時計算。

好做出明確的代碼,你也可以做

switch (section) { 
    case 0: 
    case 4: 
     return 15; 
    case 1: 
    case 2: 
    case 3: 
     return 10; 
    default: 
    return 0; 
     break; 
} 
0

使用開關/外殼。它更清楚你正在做什麼,這使得代碼更具可讀性。此外,你總是捕捉默認的情況,這使得確定性算法。

0

開關的情況下是較好導致其可讀的,因爲你已經創造了一種查找表在編譯的時候,在開關盒。所以不需要計算和計算。

1

我傾向於使用開關,當我可以。速度優化可以是真實的,但對於小型測試,我真的沒有那麼重要。在我看來,真正的優勢是開關必須是詳盡的:你必須處理所有可能的值,使用default:捕獲。

此外,開關可讀性大大斯威夫特與提高,因爲你沒有添加break聲明,以避免通過未來情況的秋天,你可以將你在相同的線路條件:

switch (section) { 
case 0, 4: 
    return 15 
case 1...3: 
    return 10 
default: 
    return 0 
} 
0

看來,編譯器在優化switch語句而不是if語句方面更好。

編譯器不知道評估if語句的順序對您是否重要,並且無法在其中執行任何優化。你可以在if語句中調用方法,影響變量。通過switch語句,它知道所有子句可以同時進行評估,並且可以以最有效的順序放置它們。

1

交換機是更好的和使用範圍的情況下,通過@邁克爾·阿澤維多

編譯器擊中它創建了所有可能的條件查找表switch語句的那一刻提及。而在if-else類型的驗證中,編譯器必須在每次執行條件時評估條件if,else if,else ..

相關問題