命名法則
❀ 前言 ❀
最近看了很多關於程式設計的觀念與資料,
雖然我現在不是什麼知名的工程師,
但在目前的專案裡,很多時候擴充到後面都會變得不知所措,
要好好設計,對我來說真的很有感。
喔對了,本篇文章參考至【Clean Code 無瑕的程式碼】
裡面還有更多的程式設計技巧
有興趣的讀者不妨自行借閱來翻翻~
❀ 正題 ❀
*以下出現範例以python為主*
關於命名,看似枝微末節的小事,實際上對於開發有極大的影響。
畢竟一旦命下去,就會被頻繁的使用,
因此我認為一個好的命名,應當包括以下要素:
- 一目了然
- 統一字詞
必須一目了然
一個神祕又懶惰的魔法師,最喜歡用的就是速速來!
魔法,
只要被他的魔法標籤紀錄,就能使用速速來!xxx
召喚該物。
然而他懶到不想念太長的名字,因此他寫了一張清單,上面寫著:
a => 糖果罐 b => 空罐子 c => 積木
以便對照,現在他只需要喊出速速來!a
就能找到糖果罐。

一天又一天過去了,他的清單也不斷增長,
然而好景不常,某天他弄丟了他的清單,
更糟的是,他忘了那些編號…
結果就是,他只能自己跑去櫃子確認要得東西了。
—————————————————————————–
是的,我們不應用看不懂的名字為變數命名
即便有使用註解解釋該變數的作用
但一個好的變數命名,其實不需要說明就能知道要幹什麼
變數不必擔心長,而要擔心看不懂
如果怕每次都要打很長麻煩,tab 就能解決一切了ouo
拿我自己專案中的傷害計算為例,
這邊的a
就不會是個好變數

可以用 randomNumber
代替
(這邊我當時的想法是,阿反正也只會用在這,那就亂取名ㄅ:p)
—————————————————————————–
於是乎,這名法師決定重新標記,以下是他的命名法則

雖然每個看起來都明確些了,卻沒有切入要點…
導致他還是搞不清楚究竟誰是誰
—————————————————————————–
這就像是以下這段程式碼
1 | def getNumber(): |
跟這一段程式碼
1 | def getPoisonedPeople(): |
原來是要找出中毒的人
是不是能很明顯地感覺到程式碼會講話呢
一個恰當的命名,能讓人們迅速理解發生了什麼事
最好統一字詞
可憐的法師已經吃盡了苦頭,他打消了偷懶的念頭,
將每個東西都清楚的一一標出。
原先以為能一勞永逸,當他喊出速速來!糖果瓶
時…
…什麼都沒發生。
而當他氣沖沖地走向櫃子,才發現

啊哈!原來叫做糖果罐
呀…
—————————————————————————–
是的,我們應該找出我們自己(或開發團隊)習慣的字詞
並且約定好之後都統一使用該字詞去定義相同類別變數
好比我在一個專案中的Player
有一個屬性speed
然而Enemy
中相同意義屬性卻叫Agi
這著實讓我在後期開發吃了不少苦頭,得不斷的查詢該物件有的屬性究竟是speed
抑或Agi
此外我們也應該避免無意義的字詞
像是the
、a
等等冠詞
永遠不會有人能分辨出theList
、aList
、list
的差異
這其實就跟list1
、list2
、list3
是差不多的意思
補充 - 類別、方法的命名淺規則
類別(Class)
一個類別通常使用名詞、名詞片語命名,並避免使用動詞
並且開頭通常為大寫。
例如:Player
、Animal
、Parent
方法(Function)
一個類別通常使用動詞、動詞片語
且常用字詞為get
(提取值)、set
(設定值)、is
(判定)
例如:getPosition
、setHp
、isMoving
❀ 後話 ❀
多虧這次教訓,這名法師總算理解到正確的命名是怎麼回事了
因此他也能精確而迅速地找到自己要的目標
真是可喜可賀皆大歡喜!
命名其實還有很多東西可以說
像是避免雙關、小聰明等等
命名法也有很多,如:小駝峰命名(Camel case)、大駝峰命名(Pascal Case)、底線命名法(Snake case)
或者一些走入歷史的命名法,如:匈牙利標誌法、成員字首等等
這邊只是寫出我比較有感的,若讀者有興趣,也能查查看
最重要的是找到自己習慣的命名法則,讓自己在之後開發能事半功倍!