Java - 为什么命名 interface 时不推荐添加 I 前缀?

Posted 程序员牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 为什么命名 interface 时不推荐添加 I 前缀?相关的知识,希望对你有一定的参考价值。

起初很困惑,I前缀能让他人立即分辨出这个类型是否是一个接口,为何要禁止使用?后来渐渐有了答案,特此记录

原因一:I前缀违反了封装原则

在TS中,类可以实现接口,接口可以继承接口,接口可以继承类。类和接口都是某种意义上的抽象和封装,继承时不需要关心它是一个接口还是一个类。

如果用I前缀,当一个变量的类型更改了,比如由接口变成了类,那变量名称就必须要更改,那代码中依赖变量的地方都要更改。

原因二:防止不恰当的命名

曾经有人调侃说 “在计算机科学中只有两件困难的事:缓存失效和给事物命名”。很多程序员都不愿花功夫去想恰当的命名。禁止使用I前缀可以迫使程序员为接口取一个合适的、带有语义、便于和其他同类型变量区分的名字,而不仅是用前缀区分。

原因三:匈牙利命名的时代已经过去了

匈牙利命名法(Hungarian_notation)由类型前缀加实际的变量名组成,用这种方法命名的变量,看到变量名,可以立即知道其类型。但它的缺点远大于它带来的好处,比如使变量名变得冗长,使相同主体名但类型不同的变量有歧义,比如sWidth、nWidth、fWidth,更好的写法应该是string input、int width、float zoomedWidth

原因四:Java VS C#

说明:加I和不加I都可以,看需要,没有强制要求。

在Java中更多是提倡不加I的,可以看下JDK的源码,都是不加I的。

微软C#是规定要加I,这也是影响从而导致有这个话题的原因。

以上是关于Java - 为什么命名 interface 时不推荐添加 I 前缀?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 rand() 编译时不包含 cstdlib 或使用命名空间 std?

ubuntu时不时自动锁屏

Java SPI(Service Provider Interface)

golang reflect反射(一):interface接口的入门(大白话)

使用Java作为程序语言时,好的命名规范都有哪些

(Java的注释,标识符标识符的命名规范)