动态语言的界面有什么意义吗?

在像Java这样的静态语言中,你需要接口,因为否则类型系统就不让你做某些事情。但是在像PHP和Python这样的动态语言中,你只是利用鸭子类型。

PHP 支持接口。Ruby和Python没有它们。因此,没有他们,您显然可以过上幸福的生活。

我大部分时间都在PHP上工作,从来没有真正利用过定义接口的能力。当我需要一组类来实现某些公共接口时,我只是在文档中描述它。

那么,你怎么看?在不使用动态语言界面的情况下,您不是更好吗?


答案 1

我认为这更像是一种便利。如果你有一个函数,它接受一个“类似文件”的对象,并且只调用一个read()方法,那么强迫用户实现某种File接口是不方便的 - 甚至是限制的。检查对象是否具有读取方法同样容易。

但是,如果您的函数需要大量方法,则检查对象是否支持接口比检查每个单独方法的支持更容易。


答案 2

是的,有一点

如果你没有显式使用接口,你的代码仍然使用对象,就好像它实现了某些方法一样,它只是不清楚不言而喻的接口是什么。

如果你定义一个函数来接受一个接口(在PHP中说),那么它会在前面失败,问题将出在调用方而不是做工作的方法上。一般来说,早点失败是一个很好的经验法则。


推荐