泛型编程(General Programming)是C++在90年代加入的一个对它而言非常重要的特征。如今C++中用得最多的标准库STL基于泛型,而使用更方便同时将GP发挥得更变态的Boost库也是十分火爆。对于Java,在JDK5.0中添加了GP特性,而且很多常用数据结构工具都被泛型化了,如ArrayList,Map等,但却遭到很多批评声,呵呵。
那么泛型编程技术对于命令式语言来说意味着什么呢?我们在项目中是否会用到这个技术呢?它是不是多余的?
对于强类型的命令式编程语言(Interpreted Programming Language)类型安全是被很多程序员津津乐道的话题,而且它常常也会令程序员头痛(消除warning时,呵呵)。泛型提供了一种机制,使得程序员能够自己制定一个计算模板,然后可适用于各种不同的类型。
像上面这个很简单的加法函数返回类型和参数类型都是int。如果是浮点型的话我们将不得不再以float类型重新写一遍这一加法函数(这里不考虑C/C++中的宏,这个东东在Java中是不存在的)。但是倘若我们使用模板的话只要定义一个函数原型,我们每次调用时只要指定模板实参的类型即可。
像上面这个编程需求是使用泛型的一个主要原因,因此泛型大部分时候都是在库中看到。它能够简化API,使得整个系统看上去更容易被理解。
而在应用程序端确实用得很少。因为要调用整型的add还是浮点型的add大部分时候都是依赖于外部输入,需要运行时加以判断,这个时候GP的最大优势就体现不出来了,呵呵。
GP的特点就是编译时确定程序员所指定的类型,生成函数或类的实体。对于一个充满运行时的交互系统,GP确实失去了其舞台。
而对于函数式编程语言或其它弱类型的动态语言,GP则是毫无必要的。
尽管如此,对于一个专业的程序员而言,GP可以提供一个锻炼你构造模型的能力,业余时间研究一下确实不错,即使它永远也用不到你公司的项目中。
好了。我要继续搞我的iPhone开发了,各位晚安。