- C語言最佳實踐
- 魏永明
- 1359字
- 2025-02-08 17:41:58
1.1 代碼可讀性的級別
在討論如何編寫具有良好可讀性的代碼之前,我們首先討論代碼可讀性的衡量標準。按照通俗的說法,代碼可讀性大致可以分為以下4個級別。
(1)初級可讀性。代碼能夠順利通過編譯并運行,也能得到預期的結果。這表明計算機——或者更準確一點,編譯器——“讀懂”了我們編寫的代碼。但過了一段時間之后,我們再來查看這些代碼時,會發現我們很難一眼看懂這些代碼的邏輯和思路。相信初學編程的程序員都有過類似的經歷。這便是具有初級可讀性的代碼。它們不是寫給其他人或者三個月之后的自己閱讀用的,而只是為了能編譯生成可執行程序而已。顯然,對其他程序員而言,維護一段連作者自己都看不懂的代碼,比重寫相同功能的代碼還要痛苦很多倍。這種代碼可以出現在初學階段的練習題解答中,但絕對不應該出現在產品當中。
(2)中級可讀性。這種代碼在經過一段時間(如3個月)之后,仍然能被代碼作者看懂。但若稍作思考,便可發現代碼中存在很多值得改進的地方,因此常常會萌生重寫代碼的沖動。這意味著代碼符合一定的章法,只是遠遠不夠成熟。如果產品代碼中存在大量具有中級可讀性的代碼,則說明產品代碼的整體質量有待改進。
(3)高級可讀性。這種代碼易于被其他程序員理解,并且其他程序員能夠在原有基礎上做進一步的修改和完善(比如調試和優化),也就是所謂的“看得懂,改得動”。這里說代碼“具有高級可讀性”,通常意味著代碼具有良好、清晰的模塊劃分和接口設計,也意味著代碼作者具有良好的編碼風格和命名習慣,只是在具體實現上還有一些不完善的地方,或者還有改進和優化的地方。也就是說,具有高級可讀性的代碼通常具有良好的可維護性和可測試性。修改這些代碼不會對項目的其他模塊產生負面影響。因此,編寫具有高級可讀性的代碼,應該是每一位程序員的目標。成熟、嚴肅、認真的程序員編寫的代碼至少應該具有高級可讀性。軟件產品中的絕大部分代碼也應該達到高級可讀性。
(4)典范級可讀性。在正確性、易讀性、易用性、執行效率方面已經達到或者貼近最優的代碼,刪除其中任何一個字符或者修改其中任何一個字母都顯得多余,甚至不需要因為編譯器的改變而做任何調整或維護。顯然,典范級可讀性是一種非常高的標準,需要豐富的經驗、高超的技巧才能編寫,更需要代碼作者多年的經驗沉淀。讓一個軟件項目的所有源代碼都達到這個標準是不切實際的,但在某些常用且基礎的功能模塊上,發展、積累或者采納具有典范級可讀性的代碼,則相對容易做到。比如,在持續發展了30多年的Linux內核代碼中,就存在大量堪稱典范的代碼片段。
根據以上代碼可讀性級別的定義,初級和中級可讀性的代碼被認為是“壞代碼”,編寫具有高級可讀性的代碼是對專業程序員的基本素養要求,而具有典范級可讀性的代碼應該是所有程序員心馳神往的目標。
舉個大家熟知的例子,經典的“Hello, world!”程序的源代碼如下:
#include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; }
這便是具有高級可讀性的C語言代碼:排版整齊、編碼嚴謹、編譯器不會報任何編譯警告,而且具有優秀的可移植性,不論使用哪個編譯器或者哪個版本的編譯器,都能正常編譯和運行。但請看下面的代碼:
int main() {printf("Hello, world!\n");}
這便是具備初級可讀性的代碼:這段代碼的排版沒有章法,字符擠在一起不易閱讀,沒有包含正確的頭文件,main()
函數的原型定義也不規范。當然,這段代碼仍然可以編譯并正確運行,但編譯器可能會報一兩個編譯警告。
- Qt 5 and OpenCV 4 Computer Vision Projects
- MATLAB 2020 從入門到精通
- Rust Cookbook
- Python自然語言處理(微課版)
- 你不知道的JavaScript(中卷)
- Python編程:從入門到實踐
- Node.js Design Patterns
- Working with Odoo
- Android玩家必備
- HoloLens與混合現實開發
- Building Serverless Architectures
- SQL Server 2008中文版項目教程(第3版)
- Java EE 7 with GlassFish 4 Application Server
- Clojure Polymorphism
- Getting Started with JUCE