淺談代碼優(yōu)化

文章結構

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]);
  }
}

引經據典

以下編程建議吊骤,為總結一本經典書籍上的知識點缎岗,文章末尾揭示這本書名

  1. 要編寫整潔的代碼,必須先寫骯臟代碼白粉,然后再清理它传泊。不會一開始寫出來的代碼就會整潔規(guī)范,邏輯清晰的鸭巴,需要經過不斷的修改眷细,優(yōu)化。先讓代碼能工作鹃祖,然后再重構溪椎。

  2. 今天寫的代碼,可能在下一版本中被修改,但可讀性對以后將要發(fā)生的修改有著深遠的影響池磁,格式對代碼質量很重要奔害;

    垂直格式:

     1. 學習報紙的排版,相關性較大的代碼放一起
     2. 若某個函數(shù)調用了另外一個地熄,就應該把它們放在一起华临,而且調用者應該盡可能放在被調用者上面
    

    水平格式:

     1. 盡力保持代碼行簡短
     2. 使用空格字符將彼此緊密相關的事物連接到一起,也用空格把相關性較弱的事物隔開
     3. 代碼對齊不是硬性要求端考,但要保證每行代碼的長度
    
  3. 函數(shù)只專注于一件事情雅潭,保持代碼量少,參數(shù)盡量少却特,沒有返回值更好扶供,有返回值的話不要反回空。

  4. 函數(shù)命名要富有表達性裂明,使被人使用的時候更好理解其作用椿浓,多使用專業(yè)相關的詞匯。

  5. 注釋方面闽晦,要注意不要寫得太啰嗦扳碍,同時要把自己的意思表達清楚,在需要添加的地方添加

  6. 多線程的調用的接口仙蛉,應該盡量使代碼量少笋敞,在使用多線程相關的API時要注意:

     1. 使用類庫提供的線程安全的群集
     2. 盡可能使用非鎖定解決方案
     3. 要注意有哪些類是非線程安全的
    

總結

一方面,需要養(yǎng)成一個在編程中不斷學習的習慣荠瘪,多總結一些好的編程習慣夯巷,在平時review代碼的時候去實踐,發(fā)現(xiàn)有不合理的地方哀墓,立馬修改趁餐。有時候可能是一個函數(shù)命名或者參數(shù)的命名不好,或者在哪里多了一行空格篮绰,注釋太老了沒有更新后雷。

另一方面,多去看看其他人寫的代碼阶牍,學習他人的有點,有不合理的地方提出自己的觀點星瘾,相互學習共同進步走孽。

程序員代碼質量的提高,是一個循序漸進的過程琳状,并不是參考一本書上的編程樣式就能馬上適應磕瓷。要在平時的編程中多去實踐,提升自己的水平。

參考書籍:《Clean Code》

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末困食,一起剝皮案震驚了整個濱河市边翁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硕盹,老刑警劉巖符匾,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘩例,居然都是意外死亡啊胶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門垛贤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焰坪,“玉大人,你說我怎么就攤上這事聘惦∧呈危” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵善绎,是天一觀的道長黔漂。 經常有香客問我,道長涂邀,這世上最難降的妖魔是什么瘟仿? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮比勉,結果婚禮上劳较,老公的妹妹穿的比我還像新娘。我一直安慰自己浩聋,他們只是感情好观蜗,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衣洁,像睡著了一般墓捻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坊夫,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天砖第,我揣著相機與錄音,去河邊找鬼环凿。 笑死梧兼,一個胖子當著我的面吹牛,可吹牛的內容都是我干的智听。 我是一名探鬼主播羽杰,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渡紫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了考赛?” 一聲冷哼從身側響起惕澎,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颜骤,沒想到半個月后唧喉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡复哆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年欣喧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梯找。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡唆阿,死狀恐怖,靈堂內的尸體忽然破棺而出锈锤,到底是詐尸還是另有隱情驯鳖,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布久免,位于F島的核電站浅辙,受9級特大地震影響,放射性物質發(fā)生泄漏阎姥。R本人自食惡果不足惜记舆,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呼巴。 院中可真熱鬧泽腮,春花似錦、人聲如沸衣赶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽府瞄。三九已至碧磅,卻和暖如春遵馆,著一層夾襖步出監(jiān)牢的瞬間鲸郊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工货邓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秆撮,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓逻恐,卻偏偏與公主長得像像吻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子复隆,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內容