分享:iOS 統一編碼風格的四種有效辦法

我們團隊中有二十個人,大神們都有自己的編程習慣,而新手們呢還沒有自己的風格,還有些如我本人不同時期的風格不一樣,這導致了我們的代碼有n種風格。 有的團隊覺得每個人自己的風格統一了就好,不能要求人人都死扣一些小細節; 有的團隊則采用了嚴格的代碼標準,強制所有人的代碼都是一個模子出來的,如google。
如果團隊內部可以統一風格,采用同一個代碼規范,讓不同人寫出來的程序可讀性基本一致或者接近,這樣對于新人來說,做過1個模塊后,在接觸別人代碼,別的模塊代碼的時候,無論開發還是維護都會更快上手,他的精力可以更多放在其他方面。同時,好的代碼規范,編程習慣也可以減少bug的產生,減少開發人員和測試人員的的時間成本。
統一編碼風格這個問題能難得到程序員么?顯然不能。
代碼格式化 (Code Format)
有的小伙伴喜歡K&R風格,有的喜歡BSD風格。 有的小伙伴代碼鎖在一起,等號左右不空格,逗號不空格。
可以采用BBUncrustifyPlugin-Xcode插件,在save的時候會自動格式化,如
// 喜歡K&R風格的小伙伴
// 將左括號留在前一行的末尾
if(1){
a=b;
}
// 在他保存代碼的時候就自動變成BSD風格啦
// 左右括號都單獨占一行
if (1)
{
a = b;
}
在格式化的時候還做了額外的設置。 if和括號之間也加了空格,等號左右也加了空格。
代碼模板 (Code Template)
不同的小伙伴,類的代碼組織結構也不一樣,如我本人的ViewController類喜歡按照以下順序來組織代碼結構:
#pragma mark - def #pragma mark - override #pragma mark - api #pragma mark - model event #pragma mark - view event #pragma mark - private #pragma mark - getter / setter
統一代碼結構可以對常用的類做代碼模板,如Handle,Model,ViewController,TableViewControoler,View類( 模板的制作教程可以參考 這篇文章 )。
多才多藝的Panda還給模板都設計了統一的LOGO:

代碼片段(Code Snippets)
一些常用的代碼片段,也添加了快捷方式。

如單利方法,輸入qsi就自動出來啦。
+ (instancetype)sharedInstance
{
static dispatch_once_t __singletonToken;
static id __singleton__;
dispatch_once( &__singletonToken, ^{ __singleton__ = [[self alloc] init]; } );
return __singleton__;
}
代碼掃描 (Code Scan)
一個方法內的行數過長,復雜度過高的話,可以通過對項目進行靜態掃描來發現( 靜態掃描的帖子可以參考 這篇文章 )。
它還可以發現如下問題:
-
可能的bug - 空的if/else/try/catch/finally 語句
-
未使用的代碼 - 未使用的局部變量和參數
-
復雜的代碼 - 高圈復雜度,NPath復雜,高NCSS
-
冗余代碼 - 多余的if語句和無用的括號
-
壞味道的代碼 - 過長的方法和過長的參數列表
-
不好的使用 - 倒邏輯和入參重新賦值
Script
為了方便安裝,可以將Code Format,Code Snippets,Code Scan,寫一個簡單的腳本:
#!/bin/bash
CURRENT_DIR=$(cd "$(dirname "$0")"; pwd)
PLUGIN_DIR="${HOME}/Library/Application Support/Developer/Shared/Xcode/Plug-ins/"
PLUGIN_CONFIG_DIR="${HOME}/.uncrustify"
SNIPPET_DIR="${HOME}/Library/Developer/Xcode/UserData/"
TEMPLATE_DIR="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/"
# 安裝代碼格式化插件
mkdir -p "${PLUGIN_DIR}"
sudo cp -rf "${CURRENT_DIR}/Plug-ins/UncrustifyPlugin.xcplugin" "${PLUGIN_DIR}"
# 格式化插件配置文件移動
mkdir -p "${PLUGIN_CONFIG_DIR}"
sudo cp -rf "${CURRENT_DIR}/uncrustify.cfg" "${PLUGIN_CONFIG_DIR}"
# # 安裝代碼模板
mkdir -p "${TEMPLATE_DIR}"
sudo cp -rf "${CURRENT_DIR}/Templates" "${TEMPLATE_DIR}"
# 安裝代碼塊
mkdir -p "${SNIPPET_DIR}"
sudo cp -rf "${CURRENT_DIR}/CodeSnippets" "$SNIPPET_DIR"
# Clean
cd "${PLUGIN_DIR}"
rm -rf __MACOSX
echo "\nPAPH Code Style successfuly installed! Please restart your Xcode."
演示的demo里有配置好的格式化風格的插件,但是只放了一個代碼模板和一個單例的代碼片段,可以在這里下載到: https://github.com/uxyheaven/XYStyle 。
以上便是我們團隊關于代碼風格統一所作出的努力和嘗試。