谈谈 "JS 和 设计泛型"

本文探讨了泛型在计算机编程中的重要性,解释了泛型是什么,以及它如何解决可重用性、类型安全和效率问题。在JavaScript和TypeScript中,泛型分别与模板方法模式和类型安全的函数、类设计相关联。文章通过示例说明了如何在TypeScript中使用泛型函数和泛型类,展示了如何通过泛型提高代码的灵活性和可复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"泛型", 计算机编程中, 一个必不可少的概念。


简单理解泛型

什么是泛型

泛型是程序设计语言的一种特性。通过参数化类型来实现在同一份代码上操作多种数据类型。

对于强类型语言来书, 提到参数,最熟悉不过的就是定义 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和泛型的对应关系

泛型 和 模板方法(设计)模式

在一个系列的行为中,有一些是确定的,有一些是不明确的,我们把确定的行为定义在一个抽象类中, 不确定的行为定义为抽象方法,由具体的子类去实现,这种不影响整个流程,但可以应对各种情况的方法 就可以称之为模板方法模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值