為什么命名interface時不推薦添加I前綴?


很多最佳實踐和 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

參考:https://stackoverflow.com/questions/31876947/confused-about-the-interface-and-class-coding-guidelines-for-typescript


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM