淺談代碼優(yōu)化

文章結構

1. 實例
2. 引經(jīng)據(jù)典
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]);
  }
}

引經(jīng)據(jù)典

以下編程建議,為總結一本經(jīng)典書籍上的知識點,文章末尾揭示這本書名

  1. 要編寫整潔的代碼,必須先寫骯臟代碼,然后再清理它。不會一開始寫出來的代碼就會整潔規(guī)范,邏輯清晰的,需要經(jīng)過不斷的修改,優(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)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容