為什麼你的代碼質量和效率不高?是不是忽略了這些點?(III)

編程語言 C語言 程序員 技術 我的IT之旅 2017-05-30

前幾篇文章主要圍繞著代碼風格以及語句處理相關,今天我們來聊一聊函數。

函數是c/c++程序的基本功能單元,也算是任何一種語言的核心內容,函數設計的合理性直接影響到函數是否可以正常完成自己的功能,在實際的函數設計中,除了基本的函數內部功能正確之外,更應該注重函數的接口設計和返回值

1.函數的參數部分:

函數的參數和返回值的傳遞方式常用的有兩種,一種是值傳遞,另一種就是指針傳遞,在C++等面嚮對象語言裡面,還會有引用傳遞。由於引用傳遞和指針傳遞有一些混淆,初學者常常引起混亂,後面的文章我會在闡述。

①最先強調一點,如果函數的參數是指針,請務必在使用指針之前,先判斷該指針是否有效,如果一不留神,在接下來的操作是建立在空指針之上,那些你就準備承擔各種意想不到的情況吧,請做好心理準備。

為什麼你的代碼質量和效率不高?是不是忽略了這些點?(III)

②參數務必寫完整,不要為了貪圖省事只寫參數的類型二省略參數名字。如果沒有參數,請用void填充。

為什麼你的代碼質量和效率不高?是不是忽略了這些點?(III)

參數順序最好符合大眾認可的順序,比如寫一個c語言的字符串查找函數,一般都喜歡被查找字符串在第一個參數位置,待查找字符串在第二個參數位置。這個順序不是唯一,一般在公司,公司會有自己的默認順序,寫之前可以參考其他同事寫的源碼。

④如③所提,當傳進來的參數中,一個或多個參數僅做輸入用,並要求不能被改動,那我們就應該在參數前加const,以防止該參數被修改,如果參數是指針,尤其注意要這麼寫,因為如果加了const,在函數內部如果被修改了,編譯會報錯提醒你。

為什麼你的代碼質量和效率不高?是不是忽略了這些點?(III)

避免函數參數太多,不要超過五個。如果參數太多,在使用時很容易將參數類型寫錯或者順序弄錯,如果參數都屬於一類性質,建議用類封裝。傳遞的時候穿類指針就好了。

2.函數的返回值部分:

①同樣需要首先強調的內容,如果返回的參數是指針類型,請務必確保指針的有效性。務必確保。

儘量不要省略函數返回值的類型,在某些c語言的教材裡面,就誤導了讀者:

為什麼你的代碼質量和效率不高?是不是忽略了這些點?(III)

如果不加返回值的類型,在c語言裡會被默認為void,默認的都要小點心了。

不要將正常值和錯誤標誌混在一起返回。正常值可用輸出參數獲得,錯誤標誌用return返回。請注意:錯誤標誌是一類,true和false都算錯誤標誌。這個習慣務必培養,會帶來意想不到的好處。實例如下:

為什麼你的代碼質量和效率不高?是不是忽略了這些點?(III)

④有些函數不需要返回值,但是如果考慮到其他的靈活性,可以加上返回值會使程序更簡潔。這個大家在實際情況中,酌情考慮。

⑤順便提一句,如果返回值是一個對象,考慮到return返回值的效率,有些程序員喜歡創建一個臨時變量存儲之後在返回臨時變量,更多的程序員喜歡在return語句處做完。千萬不要以為二者是等價的。我們先看看實例,然後在解釋吧。

為什麼你的代碼質量和效率不高?是不是忽略了這些點?(III)

現在我們來解釋一下,右側代碼會多做三件事:首先,tempValue對象被創建,同時完成初始化;然後tempValue值再被賦值,拷貝構造函數把tempValue保存到返回值得外部存儲單元;最後return結束,tempValue對象會被銷燬(調用析構函數)。而左側代碼省去了"創建臨時變量'的過程,同時也省去了拷貝構造函數和析構函數的過程,提高了程序的效率。

3.函數的其他注意事項:

①函數功能儘可能單一,學過測試的都會講究黑盒和白盒原理。

②函數體規模要小,不要太臃腫,不方便理解和維護。

③對返回的錯誤標誌一定要有說明,尤其是錯誤標誌分很多種類,讓讀者很容易理解返回標誌的含義。

好了,今天的關於函數的介紹先介紹到這裡,後續會繼續補充和完善相關知識點,如果你有更好的想法或者意見,歡迎一起交流。

相關推薦

推薦中...