Re: [討論] 大家的命名習慣 - 現有命名方法彙整及比較
※ 引述《meokay (我可以)》之銘言:
: 如題
: 現在常常會Review別人的程式碼
: 發現大家的命名習慣都好不同
: 舉例來說
: 一個Func是Check Status
: 有的人會寫 void check_status()
: 也有的人寫 void checkStatus()
: 也有看過寫 void CStatus()
: 姑且不論第三種
: 那大致上就是分成底線派跟非底線派
: 大家的命名是哪種風格啊?
: 有沒有大大願意分享一下~
: 或是有什麼堅持xDD
: 我先投非底線派一票QQ
命名規則是為了增加識別和可讀性,沒有強制的規定,但一旦選擇其中一種,會建議編寫
時統一格式;而化學、天文、生物也有其慣用的命名方法;大部分的程式語言也有對此進
行建議,以統一風格。
在程式設計的命名上,當變數、函式及類別等名稱由兩個以上的單字組合,就可以使用現
有的命名方法,增加識別和可讀性。目前已經出現的命名方法,可以分為Underscore(底
線式)、Camel-case(駝峰式)及Hungarian notation(匈牙利命名法)三大類。此文進行彙
整,並以個人經驗,探討其優缺點。
------
Underscore(底線式):
------
單字之間使用底線分隔,GNU/Linux環境中最常見,例如:string_name。
優點:使用底線取代空格,閱讀上比較直覺易懂。
缺點:比起Camel-case使用字首大寫取代空格,底線比較少在日常輸入,因此需要適應。
------
Camel-case(駝峰式):
------
單字之間使用大寫分隔,又可以分為Lower Camel-case(小駝峰式),或Upper
Camel-case(大駝峰式),而後者又稱為Pascal-case(帕斯卡式)。
Lower Camel-case(小駝峰式):
第一個字母用小寫,此變化常用在變數名稱上,例如stringName。
Upper Camel-case(大駝峰式):
第一個字母用大寫,此變化常用在函數、類別、屬性及命名空間上,例如StringName。
優點:
可以利用名稱前綴的大小寫,區分變數,以及函數、類別等其他型別。
單字之間使用大寫取代底線,能夠減少名稱的長度,減少程式碼超出視窗被遮擋的情況。
缺點:
比起Underscore使用底線取代空格,閱讀上較不直覺易懂。
------
Hungarian notation(匈牙利命名法)
------
在Camel-case(駝峰式)的基礎上,在名稱前綴添加預先約定好的縮寫,例如約定如下:
b boolean
c character
str C++ String
si short integer
i integer
li long integer
f floating point
d double-precision floating point
ld long double-precision floating point
sz Old-Style Null Terminated String
if Input File Stream
is Input Stream
of Output File Stream
os Output Stream
S declaring a struct
C declaring a class
Source: http://web.mst.edu/~cpp/common/hungarian.html
根據縮寫用途的不同,又可分為Systems Hungarian,以及Apps Hungarian。
Systems Hungarian:
名稱前前綴代表的是實際的資料型別,例如:strName。
Apps Hungarian:
名稱前綴代表的是目的或其他提示,例如:usName,其中us代表unsafe,為了避免Code
injection或XSS,之後必須進行過濾處理。
優點:
不需要IDE支援,就能夠從名稱能看出型別。
制定好的編碼規則,能夠在搜尋時更加統一易找。
制定好的編碼規則,能夠在命名及輸入上更快。
缺點:
需要另外學習編碼規則。
現代IDE已經可以輕易的區分型別,在資料型別上,此方法稍嫌多餘。
變數型別修改時,名稱也必須修正維護。
採用縮寫來命名,對新手較不友善,例如szName,不如stringZeroName。
也更容易造成歧義,例如szName,更容易被誤讀成其他意思,也難以Google。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.41.25 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1566120705.A.C1F.html
※ 編輯: lion741205 (101.13.41.25 臺灣), 08/18/2019 17:52:55
→
08/18 18:05,
4年前
, 1F
08/18 18:05, 1F
→
08/18 18:05,
4年前
, 2F
08/18 18:05, 2F
→
08/18 18:06,
4年前
, 3F
08/18 18:06, 3F
推
08/18 18:07,
4年前
, 4F
08/18 18:07, 4F
→
08/18 18:07,
4年前
, 5F
08/18 18:07, 5F
→
08/18 18:09,
4年前
, 6F
08/18 18:09, 6F
→
08/18 18:10,
4年前
, 7F
08/18 18:10, 7F
嗯,有些約定俗成的縮寫,有時候會造成新手混淆,但對老手來說很方便
※ 編輯: lion741205 (101.13.41.25 臺灣), 08/18/2019 18:16:13
→
08/18 18:15,
4年前
, 8F
08/18 18:15, 8F
→
08/18 18:16,
4年前
, 9F
08/18 18:16, 9F
只是為了講匈牙利命名找的範例,裡面的縮寫我也不全用的 XD
→
08/18 18:18,
4年前
, 10F
08/18 18:18, 10F
→
08/18 18:19,
4年前
, 11F
08/18 18:19, 11F
→
08/18 18:19,
4年前
, 12F
08/18 18:19, 12F
※ 編輯: lion741205 (101.13.41.25 臺灣), 08/18/2019 18:20:50
→
08/18 18:20,
4年前
, 13F
08/18 18:20, 13F
→
08/18 18:21,
4年前
, 14F
08/18 18:21, 14F
→
08/18 18:21,
4年前
, 15F
08/18 18:21, 15F
→
08/18 18:21,
4年前
, 16F
08/18 18:21, 16F
→
08/18 18:22,
4年前
, 17F
08/18 18:22, 17F
→
08/18 18:22,
4年前
, 18F
08/18 18:22, 18F
→
08/18 18:30,
4年前
, 19F
08/18 18:30, 19F
→
08/18 18:30,
4年前
, 20F
08/18 18:30, 20F
→
08/18 18:32,
4年前
, 21F
08/18 18:32, 21F
→
08/18 18:34,
4年前
, 22F
08/18 18:34, 22F
→
08/18 18:35,
4年前
, 23F
08/18 18:35, 23F
→
08/18 18:37,
4年前
, 24F
08/18 18:37, 24F
推
08/18 19:14,
4年前
, 25F
08/18 19:14, 25F
→
08/18 19:14,
4年前
, 26F
08/18 19:14, 26F
→
08/18 19:42,
4年前
, 27F
08/18 19:42, 27F
→
08/18 19:42,
4年前
, 28F
08/18 19:42, 28F
→
08/18 20:25,
4年前
, 29F
08/18 20:25, 29F
推
08/18 20:55,
4年前
, 30F
08/18 20:55, 30F
→
08/18 20:55,
4年前
, 31F
08/18 20:55, 31F
→
08/18 21:37,
4年前
, 32F
08/18 21:37, 32F
→
08/18 21:50,
4年前
, 33F
08/18 21:50, 33F
推
08/19 03:42,
4年前
, 34F
08/19 03:42, 34F
→
08/19 09:29,
4年前
, 35F
08/19 09:29, 35F
→
08/19 09:31,
4年前
, 36F
08/19 09:31, 36F
→
08/19 09:32,
4年前
, 37F
08/19 09:32, 37F
→
08/19 09:33,
4年前
, 38F
08/19 09:33, 38F
→
08/19 09:34,
4年前
, 39F
08/19 09:34, 39F
推
08/19 09:49,
4年前
, 40F
08/19 09:49, 40F
→
08/19 09:49,
4年前
, 41F
08/19 09:49, 41F
→
08/19 09:52,
4年前
, 42F
08/19 09:52, 42F
我覺得編碼約定做得好,能夠統一寫法,反而有利團隊閱讀、搜尋和命名,
只是對專案新人或以後接手的人比較不友善,還要另外去了解那些縮寫的含意;
比起寫清楚講明白,更容易造成歧義,所以有些書提倡不要使用匈牙利命名法。
推
08/19 10:25,
4年前
, 43F
08/19 10:25, 43F
→
08/19 10:25,
4年前
, 44F
08/19 10:25, 44F
推
08/19 12:58,
4年前
, 45F
08/19 12:58, 45F
→
08/19 15:03,
4年前
, 46F
08/19 15:03, 46F
推
08/20 12:52,
4年前
, 47F
08/20 12:52, 47F
→
08/20 13:44,
4年前
, 48F
08/20 13:44, 48F
推
08/20 13:58,
4年前
, 49F
08/20 13:58, 49F
→
08/20 13:58,
4年前
, 50F
08/20 13:58, 50F
→
08/20 13:58,
4年前
, 51F
08/20 13:58, 51F
→
08/20 13:58,
4年前
, 52F
08/20 13:58, 52F
→
08/20 13:58,
4年前
, 53F
08/20 13:58, 53F
推
08/20 14:01,
4年前
, 54F
08/20 14:01, 54F
→
08/20 14:01,
4年前
, 55F
08/20 14:01, 55F
→
08/20 14:01,
4年前
, 56F
08/20 14:01, 56F
推
08/20 14:21,
4年前
, 57F
08/20 14:21, 57F
→
08/20 14:21,
4年前
, 58F
08/20 14:21, 58F
→
08/20 14:21,
4年前
, 59F
08/20 14:21, 59F
→
08/20 14:21,
4年前
, 60F
08/20 14:21, 60F
※ 編輯: lion741205 (49.218.17.17 臺灣), 08/20/2019 15:27:33