文章結構
1. 實例
2. 引經據典
3. 總結
實例
首先引入一個代碼優(yōu)化的實例万伤,請參讀以下代碼:
- (void)sdkAuthSetServerUrlBase:(NSString *)url isAuthTest:(NSNumber *)test {
if (test.boolValue) {
_isSDKAuthTest = test.boolValue;
if (url && url.length > 0) {
SdkAuth_setServerUrlBase([url cStringUsingEncoding:NSUTF8StringEncoding]);
}
} else {
if (!_isSDKAuthTest) {
if (url && url.length > 0) {
SdkAuth_setServerUrlBase([url cStringUsingEncoding:NSUTF8StringEncoding]);
}
}
_isSDKAuthTest = test.boolValue;
}
}
代碼格式整齊趋距,變量和函數(shù)名命名規(guī)范,可以從第一眼看下去喳篇,能難理清楚其中的邏輯敞临。該函數(shù)是一個供內部測試使用的接口,有兩個標準位進行控制杭隙。
首先可以把函數(shù)的大致邏輯理清楚一下哟绊,其主要功能應該是設置sdkAuth的url,于是先把設置url的功能單獨拿出來一下痰憎,這是在url存在而且有效的時候進行設置票髓,于是函數(shù)可以調整為如下:
- (void)sdkAuthSetServerUrlBase:(NSString *)url isAuthTest:(NSNumber *)test {
if (test.boolValue) {
[self setServerUrlBase:url];
} else {
if (!_isSDKAuthTest) {
[self setServerUrlBase:url];
}
}
_isSDKAuthTest = test.boolValue;
}
- (void)setServerUrlBase:(NSString *)url {
if (url && url.length > 0) {
SdkAuth_setServerUrlBase([url cStringUsingEncoding:NSUTF8StringEncoding]);
}
}
再審視我們的代碼,視乎關系變得清楚了一些铣耘,但其控制邏輯可以再優(yōu)化一下洽沟,我從滿足什么條件的情況下設置url這個角度進行分析。
test.boolValue | _isSDKAuthTest | setServerUrlBase |
---|---|---|
1 | 0 | true |
1 | 1 | true |
0 | 0 | true |
0 | 1 | false |
從組合情況來看蜗细,只有當 test.boolValue 為 false 裆操,_isSDKAuthTest 為 true 的情況下,會不調用 setServerUrlBase 接口炉媒,即:
if(!test.boolValue && _isSDKAuthTest)
的情況下踪区,不設置。
最終調整版本為:
- (void)sdkAuthSetServerUrlBase:(NSString *)url isAuthTest:(NSNumber *)test {
BOOL obsoleteStatus = (!test.boolValue && _isSDKAuthTest);
if (!obsoleteStatus) {
[self setServerUrlBase:url];
}
_isSDKAuthTest = test.boolValue;
}
- (void)setServerUrlBase:(NSString *)url {
if (url && url.length > 0) {
SdkAuth_setServerUrlBase([url cStringUsingEncoding:NSUTF8StringEncoding]);
}
}
引經據典
以下編程建議吊骤,為總結一本經典書籍上的知識點缎岗,文章末尾揭示這本書名
要編寫整潔的代碼,必須先寫骯臟代碼白粉,然后再清理它传泊。不會一開始寫出來的代碼就會整潔規(guī)范,邏輯清晰的鸭巴,需要經過不斷的修改眷细,優(yōu)化。先讓代碼能工作鹃祖,然后再重構溪椎。
-
今天寫的代碼,可能在下一版本中被修改,但可讀性對以后將要發(fā)生的修改有著深遠的影響池磁,格式對代碼質量很重要奔害;
垂直格式:
1. 學習報紙的排版,相關性較大的代碼放一起 2. 若某個函數(shù)調用了另外一個地熄,就應該把它們放在一起华临,而且調用者應該盡可能放在被調用者上面
水平格式:
1. 盡力保持代碼行簡短 2. 使用空格字符將彼此緊密相關的事物連接到一起,也用空格把相關性較弱的事物隔開 3. 代碼對齊不是硬性要求端考,但要保證每行代碼的長度
函數(shù)只專注于一件事情雅潭,保持代碼量少,參數(shù)盡量少却特,沒有返回值更好扶供,有返回值的話不要反回空。
函數(shù)命名要富有表達性裂明,使被人使用的時候更好理解其作用椿浓,多使用專業(yè)相關的詞匯。
注釋方面闽晦,要注意不要寫得太啰嗦扳碍,同時要把自己的意思表達清楚,在需要添加的地方添加
-
多線程的調用的接口仙蛉,應該盡量使代碼量少笋敞,在使用多線程相關的API時要注意:
1. 使用類庫提供的線程安全的群集 2. 盡可能使用非鎖定解決方案 3. 要注意有哪些類是非線程安全的
總結
一方面,需要養(yǎng)成一個在編程中不斷學習的習慣荠瘪,多總結一些好的編程習慣夯巷,在平時review代碼的時候去實踐,發(fā)現(xiàn)有不合理的地方哀墓,立馬修改趁餐。有時候可能是一個函數(shù)命名或者參數(shù)的命名不好,或者在哪里多了一行空格篮绰,注釋太老了沒有更新后雷。
另一方面,多去看看其他人寫的代碼阶牍,學習他人的有點,有不合理的地方提出自己的觀點星瘾,相互學習共同進步走孽。
程序員代碼質量的提高,是一個循序漸進的過程琳状,并不是參考一本書上的編程樣式就能馬上適應磕瓷。要在平時的編程中多去實踐,提升自己的水平。
參考書籍:《Clean Code》