本文為投稿文章,作者:曉月(博客)
我們團隊中有二十個人,大神們都有自己的編程習慣,而新手們呢還沒有自己的風格,還有些如我本人不同時期的風格不一樣,這導致了我們的代碼有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。
以上便是我們團隊關於代碼風格統一所作出的努力和嘗試。