前不久看到一個Java版本的十大常見違規編碼。其中基本道理大部分語言都是通用的,我來整理一個object C 版本的吧。
(以下這些編碼規範都是我在之前公司,我們項目組組長王磊給我灌輸,並且不斷強調的編碼規範。他對我的代碼風格有很大的影響,在此謝謝他對我不斷地指導和幫助。)
- Xcode支持自動縮進和縮進糾正,我們只要選中需要格式化的代碼,然後點擊 Control + i。XCode 會自動幫我們把代碼縮進弄好。不過在平時編寫的時候也要注意,良好的縮進是可讀性很重要的一部分,因爲他能標示出哪些代碼使數以一個整體的。
- 避免多個返回,這個印象很深刻,我因爲這個事情,代碼被拿到大家面前講過,所以這個錯誤我一般不會犯。
不好的寫法:
這樣的寫法,會導致一個函數中有多個返回的地方,有些處理,因爲邏輯的需要不得不放到最後面做,但是就因爲這樣的結構忽略掉了。- (BOOL) isAdult:(NSInteger) userAge { if (userAge > 18) { return YES; }else{ return NO; } }
更好的寫法:
當然,因爲邏輯比較簡單,這樣的寫法看起來比較怪,但是如果邏輯判斷比較複雜的話,這樣寫,方法於何時結束一目瞭然,必要的收尾動作也不會錯過。- (BOOL) isAdult:(NSInteger) userAge { BOOL result = NO; if (userAge > 18) { result = YES; }else{ result = NO; } return result; }
- 簡化if-else。
有時候會碰到結構很複雜的邏輯判斷。我一般的做法有三種:
1.能轉用switch語句就儘量轉用switch語句,
2.不能轉用的就把某一獨立模塊抽出來做成函數。
3.簡單的判斷使用 條件?結果1:結果2 的方式表達。 - 對於If,if-else,while,for,switch,這些語句最好使用{ }擴起來。這樣做的好處是代碼結構清晰,你能分辨清楚每一個語句塊。
PS:在switch裏面的case語句,最好使用{}括起來,這樣使用ARC的時候不會出問題。(在使用switch時,ARC不允許在switch塊內定義指針變量(或者對象,其實是一樣的),如果需要在switch內定義指針變量,最好使用{}括起來,這樣編譯器在確定變量作用域時,纔不會出錯。)
不好的寫法:- (BOOL) isAdult:(NSInteger) userAge { BOOL result = NO; if (userAge > 18) result = YES; else result = NO; return result; }
更好的寫法:
- (BOOL) isAdult:(NSInteger) userAge { BOOL result = NO; if (userAge > 18) { result = YES; }else{ result = NO; } return result; }
- 多處使用的常量(包括字符串,數字等),最好使用宏定義。
這樣做的好處是,如果需要更改這個字串,我們只需要在一個地方做修改就可以了。 - 對於這樣的常量字串推薦使用全部大寫。就像這樣:EXAMPLE_STATIC_STRING。
這樣做的好處是,類似的常量字串,我們在代碼裏,輕鬆就能發現。 - 每一個switch語句都應該有default,哪怕你什麼也不寫。
default語句表明了程序在這種情況下,應該做什麼處理,以便讓後面的程序員瞭解。當然什麼也不寫,就告訴後來的程序員我們是這麼處理的:什麼也不用做。 - 在邏輯允許的情況下,將多個嵌套if判斷放在單行內完成。
不好的寫法:
更好的寫法:if (userAge > 18) { if (registered != YES) { [self userRegister]; } }
if (userAge > 18 && registered != YES) { [self userRegister]; }
- 在同一個類內有多個不同方面的代碼時,可以使用
來區分不同的模塊,XCode會自動創建一個分隔符在方法列表中以示區分。#pragma mark -