"泛型", 计算机编程中, 一个必不可少的概念。
简单理解泛型
什么是泛型
泛型是程序设计语言的一种特性。通过参数化类型来实现在同一份代码上操作多种数据类型。
对于强类型语言来书, 提到参数,最熟悉不过的就是定义 function A 时有形参,然后调用 A 时传递实参。 指定一个表示类型的变量,用它来代替某个实际的类型用于编程,而后通过实际调用时传入类型 来对其进行替换,以达到一段使用泛型程序可以实际适应不同类型的目的。
注: 各种程序设计语言和其编译器、运行环境对泛型的支持均不一样
泛型解决的问题
- 可重用性
- 类型和算法安全
- 效率
这是非泛型类和非泛型方法无法具备的
常见的情形
你有一个函数,它带有一个参数,参数类型是A,然而当参数类型改变成B的时候,你不得不复制这个函数
例如,下面的代码中第二个函数就是复制第一个函数——它仅仅是用String类型代替了Integer类型
func areIntEqual(x: Int, _ y: Int) -> Bool {
return x == y
}
func areStringsEqual(x: String, _ y: String) -> Bool {
return x == y
}
areStringsEqual("ray", "ray") // true
areIntEqual(1, 1) // true
复制代码
通过采用泛型,可以合并这两个函数为一个并同时保持类型安全。下面是代码实现
// 用一个通用的数据类型T来作为一个占位符,等待在实例化时用一个实际的类型来代替
func areTheyEqual(x: T, _ y: T) -> Bool {
return x == y
}
areTheyEqual("ray", "ray")
areTheyEqual(1, 1)
复制代码
JavaScript和泛型的对应关系
泛型 和 模板方法(设计)模式
在一个系列的行为中,有一些是确定的,有一些是不明确的,我们把确定的行为定义在一个抽象类中, 不确定的行为定义为抽象方法,由具体的子类去实现,这种不影响整个流程,但可以应对各种情况的方法 就可以称之为模板方法模式