为什么命名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

posted @ 2021-05-07 13:59  Claiyre  阅读(1899)  评论(0编辑  收藏  举报