上周,《中文技術(shù)文檔寫作規(guī)范 》加入了文件的命名規(guī)則。
"文件名建議只使用小寫字母,不使用大寫字母。"
"為了醒目,某些說(shuō)明文件的文件名,可以使用大寫字母,比如README
、LICENSE
。"
網(wǎng)友看見(jiàn)了,就提問(wèn)為什么文件名要小寫?
說(shuō)實(shí)話,雖然這是 Linux 傳統(tǒng),我卻從沒(méi)認(rèn)真想過(guò)原因。趕緊查資料,結(jié)果發(fā)現(xiàn)四個(gè)很有說(shuō)服力的理由,支持這樣做。
一、可移植性
Linux 系統(tǒng)是大小寫敏感的,而 Windows 系統(tǒng)和 Mac 系統(tǒng)正好相反,大小寫不敏感。一般來(lái)說(shuō),這不是大問(wèn)題。
但是,如果兩個(gè)文件名只有大小寫不同,其他都相同,跨平臺(tái)就會(huì)出問(wèn)題。
foobar
Foobar
FOOBAR
fOObAr
上面四個(gè)文件名,Windows 系統(tǒng)會(huì)把它們都當(dāng)作foobar
。如果它們同時(shí)存在,你可能沒(méi)辦法打開(kāi)后面三個(gè)文件。
另一方面,在 Mac 系統(tǒng)上開(kāi)發(fā)時(shí),有時(shí)會(huì)疏忽,寫錯(cuò)大小寫。
// 正確文件名是 MyModule.js
const module = require('./myModule');
上面的代碼在 Mac 上面可以運(yùn)行,因?yàn)?Mac 認(rèn)為MyModule.js
和myModule.js
是同一個(gè)文件。但是,一旦代碼到服務(wù)器運(yùn)行就會(huì)報(bào)錯(cuò),因?yàn)?Linux 系統(tǒng)找不到myModule.js
。
如果所有的文件名都采用小寫,就不會(huì)出現(xiàn)上面的問(wèn)題,可以保證項(xiàng)目有良好的可移植性。
二、易讀性
小寫文件名通常比大寫文件名更易讀,比如accessibility.txt
就比ACCESSIBILITY.TXT
易讀。
有人習(xí)慣使用駝峰命名法,單詞的第一個(gè)字母大寫,其他字母小寫。這種方法的問(wèn)題是,如果遇到全部是大寫的縮略詞,就會(huì)不適用。
比如,一個(gè)姓李的紐約特警,無(wú)論寫成NYPoliceSWATLee
還是NyPoliceSwatlee
,都怪怪的,還是寫成ny-police-swat-lee
比較容易接受。
三、易用性
某些系統(tǒng)會(huì)生成一些預(yù)置的用戶目錄,采用首字母大寫的目錄名。比如,Ubuntu 在用戶主目錄會(huì)默認(rèn)生成Downloads
、 Pictures
、Documents
等目錄。
Mac 系統(tǒng)更過(guò)分,一部分系統(tǒng)目錄也是大寫的,比如/Library/Audio/Apple Loops/
。
另外,某些常見(jiàn)的配置文件或說(shuō)明文件,也采用大寫的文件名,比如Makefile
、INSTALL
、CHANGELOG
、.Xclients
和.Xauthority
等等。
所以,用戶的文件都采用小寫文件名,就很方便與上面這些目錄或文件相區(qū)分。
如果你打破砂鍋問(wèn)到底,為什么操作系統(tǒng)會(huì)采用這樣的大寫文件名?原因也很簡(jiǎn)單,因?yàn)樵缙?Unix 系統(tǒng)上,ls
命令先列出大寫字母,再列出小寫字母,大寫的路徑會(huì)排在前面。因此,如果目錄名或文件名是大寫的,就比較容易被用戶首先看到。
四、便捷性
文件名全部小寫,還有利于命令行操作。比如,某些命令可以不使用-i
參數(shù)了。
# 大小寫敏感的搜索
$ find . -name abc
$ locate "*.htmL"
# 大小寫不敏感的搜索
$ find . -iname abc
$ locate -i "*.HtmL"
另外,大寫字母需要按下 Shift 鍵,多多少少有些麻煩。如果文件名小寫,就不用碰這個(gè)鍵了,不僅省事,還可以提高打字速度。
程序員長(zhǎng)時(shí)間使用鍵盤,每分鐘少按幾次 Shift,一天下來(lái)就可以省掉很多手指動(dòng)作。長(zhǎng)年累月,也是對(duì)自己身體的一種保護(hù)。
綜上所述,文件名全部使用小寫字母和連詞線(all-lowercase-with-dashes
),是一種值得推廣的正確做法。