日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

Reply To: 动态类型语言需要接口吗?

Home Forums 《冒号课堂》讨论区 动态类型语言需要接口吗? Reply To: 动态类型语言需要接口吗?

#1328
hui
Keymaster

interface的type checking更能保障程序的正确性,并让设计者更用心地设计接口的规范,让使用者更明确接口的用法。但其缺点也是明显的,即不易应对需求或设计的变化。没有人能保证一个接口的选择是一成不变的,而一旦需要改变,则所有涉及该接口的代码都可能受到影响,有的是源码级的影响(比如接口名、接口方法名、接口方法个数、接口方法签名等的改变),有的是二进制级的影响。从这个意义上说,项目越大,受的影响越大。其结果往往是,为了避免这种影响,一些原来设计不合理的接口只能被保留,由此带来代码的丑陋和别扭。反观duck typing,虽然缺乏type checking,但会让代码更加简洁、灵活和优雅。但前提是要保证:设计者要明确制订规范,使用者要严格遵循规范,并且一旦规范发生变化,一定要修改文档,并核查所有相关代码,以确保程序的正确性。

总的说来,规范比类型检查更加重要。一个只依赖编译器的类型检查而忽视类型规范的程序员,比使用动态类型语言但注重规范的程序员要危险得多。只是在实际中,不少使用动态类型语言的人对规范可能不如使用静态类型语言的人那么重视。究其原因,很可能是:目前最主流的语言,如C、C++、Java、C#等都是静态类型语言,由此集中了更多优秀的程序员。说到底,这并非语言本身的问题,而是程序员的素质问题。

 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)