robot
最新文章(10)
Mqskit 和其它相關工具
CPython 的 GC 二、三事
寫 Mecurial Extension 是件快樂的事!
Mozilla 台灣辨公室徵人啟事
關於 Apple 的兩項專利
core dump 之前的 frame
怎麼發出 beep 聲?
先承認你要找的是奴才吧!
程式碼要清的多乾淨?
FreeBSD 的 Thread-Local Storage 實作
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (122)
Python (93)
FreeBSD (71)
WEB (61)
URL (48)
hardware (46)
javascript (36)
Linux (34)
blog (30)
C++ (16)
所有關鍵字
新增 URL
名與義
by thinker
2 Columns
關鍵字:
coding
寫程式時,不免都要命名。要為變數命名,要為 function 命名,要為 data type 命名,也要為檔案命名。有這麼多名字,取一個合適的好名字之後,然道就高枕無悠嗎?這是一個美夢,我要做的可不只是取一個好名字。 就算霎費苦心的為每一個變數、函數、.....叭啦、叭啦的取個好名字,你依然會遇到每多問題。我要提的一個問題是,好名字會重複,而且不可避免。例如,你為停車場寫一套管理程式,那麼你至少會定義車子、停車場等資訊,於是很自然的定義了 {{{#!cpp class car { ...... }; class parking_area { ...... }; }}} car 和 parking_area 看起來是再清楚、明白不過的好名字,可是當你在使用時卻發生一些問題。例如你要計算目前場中所有車的平均已停時間 {{{#!cpp int avarage_parking_time(parking_area *area) { car *car; int i, num_cars; int total = 0; num_cars = area->num_of_cars_in_area(); for(i = 0; i < num_cars; i++) { car = area->get_car(i); totoal += now() - car->enter_time(); } return total / num_cars; } }}} 於是,你會發覺變數 car 和類別 car 同名。幸運的話,你使用的 language 把 data type 和 variable 的 namespace 分開,允許你這麼做。不幸的話,你必需另外再取個名字。於是,可以改變數名稱,或改類別名稱。但還有什麼名字比起 car 再簡單和明白呢? 就算你的程式語言允許你的變數和類別同名,但同名的確會引發一個問題。當程式越來越大,邏輯變的複雜時,往往會讓類別 car 和變數 car 把你搞的頭昏腦脹。 於是,避免使用相同的名稱似乎才是正確的解決方式。但,這卻不是這麼容易。由其對於英文單字懂不了幾個字的東方人而言,這更是困難。就算你是換成用中文命名,這個問題依然存在。 我的建議是,為每一個 data type 附加一個特定字串,例如 {{{#!cpp class car_t { }; class parking_area_t { }; }}} 我用字尾 "_t" 區別 data type 和變數。 "_t" 一來可以直接意會到 "type" ,而來對釐清語意有很大的幫助。 "car_t" 很直覺的唸 "car type",就不會和變數 car 搞混。 有人建議在每個名字後面都加上 "_b" 、 "_p" ..... 等等的字尾,以表名其 data type 和作用。但我覺的這過頭了,而且會讓 programmer 更頭大。基本原則是越簡單越好,我們要處理的事情已經夠複雜了。另外加了一堆不同的字尾,也容易讓你將不同 type 的變數取相同的名字。例如: car_b 、 car_p 、 .... 等等,這些名字可能都代表類似的資訊,但只是用不同的 type 。這樣的名字,會大大的增加你大腦的負擔。在大腦裡,你只會記得字情的大概,因而 car_p 、 car_b 對你的大腦而言,都是 car 。所以,除了 car_t 之外,應該避免自找麻煩,你應該找更貼切的名字。 同名的問題,在 method/function 和 data type 或 variable 之間比較不會發生。因為 method/function 往往是代表一個動作,是動$詞$。而 data type 和 variable 則同是名$詞$,容易發生這個問題。 在寫程式,取錯名字,或取了容易混淆的名字,往往是災難的開始。因此,不要為不同的目標取相近的名字,除非你要訓練你的大腦。
最後更新時間: 2007-09-12 17:41:39 CST |
引用
查詢:
COMMENTS: