1.6 命名的藝術
在給代碼中的變量和函數取名時,要盡量使用正確的英文術語及其簡寫。
但需要注意的是,不同的領域有不同的術語使用習慣。比如,當我們的代碼涉及樹形數據結構時,就會經常使用如下英文術語。
● node
:表示樹形數據結構中的一個節點;不要用item
或element
表示節點,這兩個詞的準確含義為條目
和元素
。
● child
:表示子節點。
● sibling
:表示兄弟節點,不要用brother
表示兄弟節點。
● parent
、root
:分別表示父節點和根節點,不要使用father
或者mother
等表示上一級節點。
● first
、last
:分別表示頭節點和尾節點。
● next
、previous
(或prev
):分別表示下一節點和前一節點。
● ascendant
、descendants
:分別表示祖先節點或子孫節點。
再比如,當我們的代碼涉及鏈表(linked list)這種數據結構時,則會經常使用如下英文術語。
● node
:表示鏈表中的一個節點。
● head
、tail
:分別表示鏈表的頭節點和尾節點。
● next
、previous
(或prev
):分別表示下一節點和前一節點。
針對相應的領域使用正確的英文術語并基于這些英文術語來命名,可以避免很多誤解,這是提升代碼可讀性的一種重要手段。需要特別提醒的是,在有合適英文術語的情形下,要避免使用一些“萬金油”名稱,如item
、data
等含義廣泛的名稱。
為變量和函數取名時,還要考慮正確的時態和單復數形式。如前所述,表示鏈表的變量應該取名為linked_list
而不是link_list
。又如,雙鏈表可以用dbl_linked_list
表示。表示單個元素的變量用單數形式,如node
表示一個節點、child
表示一個子節點。表示多個元素的變量則用復數形式,如nodes
表示節點數組、children
表示子節點數組等。
在代碼中,縮寫是十分常見的。采用約定俗成的縮寫不僅可以提高代碼的輸入效率、節省版面空間,而且完全不會影響代碼的可讀性。但是,要盡量采用約定俗成的縮寫,不要自創,更不要使用漢字拼音首字母縮寫的名稱。C代碼中經常使用的一些縮寫如表1.1所示。
表1.1 C代碼中經常使用的一些縮寫

為局部變量命名時,應該盡量采用簡潔的名稱。例如,i
、j
、k
一般并不推薦作為變量的名稱,但在for
或while
循環中,將這3個字母作為變量的名稱非常方便,不會有任何歧義;而且循環變量一般僅限于這3個字母,如果一個循環中還需要更多的循環變量,則說明程序的結構存在問題,需要進行重構。
在局部代碼塊中,還可以用n
表示數量,用len
表示長度,用sz
表示大小或尺寸,用p
表示指針,用tmp
表示臨時變量,用buf
表示臨時緩沖區。這些都是約定俗成的簡潔名稱,不會影響代碼的可讀性。
對于函數或全局變量的命名,應采用下面的約定。
(1)函數庫接口:<type> <lib prefix>_<short phrase>(...)
。例如:
void mylib_init_linked_list(struct linked_list *p);
(2)文件內:static <type><short phrase>(...)
。例如:
static void init_liked_list(struct linked_list *p);
(3)模塊間:<type>_<module_prefix>_<short phrase>(...)
。例如:
void _mymodule_init_liked_list(struct linked_list *p);
此外,如果使用的是GCC這樣的編譯器,那么可以在聲明模塊間接口時添加屬性,例如:
void _mymodule_init_liked_list(struct linked_list *p) __attribute__((visibility("hidden")));
這里的visibility
(可見性)屬性取值為hidden
,表示這個符號(即函數名)在形成函數庫后對外不可見,從而可以有效地防止命名污染。
- Java Web開發學習手冊
- Building a Home Security System with Raspberry Pi
- Rust Cookbook
- Oracle數據庫從入門到運維實戰
- Learning Raspbian
- Clean Code in C#
- 機器學習微積分一本通(Python版)
- Python語言科研繪圖與學術圖表繪制從入門到精通
- Angular應用程序開發指南
- ROS機器人編程實戰
- 零基礎學SQL(升級版)
- Spring Boot 3:入門與應用實戰
- AI輔助編程Python實戰:基于GitHub Copilot和ChatGPT
- Testing Practitioner Handbook
- Instant AutoIt Scripting