基本編碼規範 OC版本

本文的Java英文版出自veerasundar


前不久看到一個Java版本的十大常見違規編碼。其中基本道理大部分語言都是通用的,我來整理一個object C 版本的吧。

(以下這些編碼規範都是我在之前公司,我們項目組組長王磊給我灌輸,並且不斷強調的編碼規範。他對我的代碼風格有很大的影響,在此謝謝他對我不斷地指導和幫助。)

  1. Xcode支持自動縮進和縮進糾正,我們只要選中需要格式化的代碼,然後點擊 Control + i。XCode 會自動幫我們把代碼縮進弄好。不過在平時編寫的時候也要注意,良好的縮進是可讀性很重要的一部分,因爲他能標示出哪些代碼使數以一個整體的。

  2. 避免多個返回,這個印象很深刻,我因爲這個事情,代碼被拿到大家面前講過,所以這個錯誤我一般不會犯。
    不好的寫法:
    - (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;
    }
    當然,因爲邏輯比較簡單,這樣的寫法看起來比較怪,但是如果邏輯判斷比較複雜的話,這樣寫,方法於何時結束一目瞭然,必要的收尾動作也不會錯過。

  3. 簡化if-else。
    有時候會碰到結構很複雜的邏輯判斷。我一般的做法有三種:
    1.能轉用switch語句就儘量轉用switch語句,
    2.不能轉用的就把某一獨立模塊抽出來做成函數。
    3.簡單的判斷使用 條件?結果1:結果2 的方式表達。
  4. 對於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;
    }


  5. 多處使用的常量(包括字符串,數字等),最好使用宏定義。
    這樣做的好處是,如果需要更改這個字串,我們只需要在一個地方做修改就可以了。

  6. 對於這樣的常量字串推薦使用全部大寫。就像這樣:EXAMPLE_STATIC_STRING。
    這樣做的好處是,類似的常量字串,我們在代碼裏,輕鬆就能發現。

  7. 每一個switch語句都應該有default,哪怕你什麼也不寫。
    default語句表明了程序在這種情況下,應該做什麼處理,以便讓後面的程序員瞭解。當然什麼也不寫,就告訴後來的程序員我們是這麼處理的:什麼也不用做。

  8. 在邏輯允許的情況下,將多個嵌套if判斷放在單行內完成。
    不好的寫法:

        if (userAge > 18) {
            if (registered != YES) {
                [self userRegister];
            }
        }
    更好的寫法:
        if (userAge > 18 && registered != YES) {
            [self userRegister];
        }
  9. 在同一個類內有多個不同方面的代碼時,可以使用
    #pragma mark -
    來區分不同的模塊,XCode會自動創建一個分隔符在方法列表中以示區分。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章