很多最佳實踐和 ts interface的命名規范中都強調過這樣一句話:
Do not use "I" as a prefix for interface names
起初很困惑,I前綴能讓他人立即分辨出這個類型是否是一個接口,為何要禁止使用?后來漸漸有了答案,特此記錄:
原因一:I前綴違反了封裝原則
在TS中,類可以實現接口,接口可以繼承接口,接口可以繼承類。類和接口都是某種意義上的抽象和封裝,繼承時不需要關心它是一個接口還是一個類。
如果用I前綴,當一個變量的類型更改了,比如由接口變成了類,那變量名稱就必須要更改,那代碼中依賴變量的地方都要更改。
原因二:防止不恰當的命名
曾經有人調侃說 “在計算機科學中只有兩件困難的事:緩存失效和給事物命名”。很多程序員都不願花功夫去想恰當的命名。禁止使用I前綴可以迫使程序員為接口取一個合適的、帶有語義、便於和其他同類型變量區分的名字,而不僅是用前綴區分。
原因三:匈牙利命名的時代已經過去了
匈牙利命名法(Hungarian_notation)由類型前綴加實際的變量名組成,用這種方法命名的變量,看到變量名,可以立即知道其類型。但它的缺點遠大於它帶來的好處,比如使變量名變得冗長,使相同主體名但類型不同的變量有歧義,比如sWidth、nWidth、fWidth,更好的寫法應該是string input、int width、float zoomedWidth
