Generic
概述
参考:
- Wiki, Generic proramming(泛型编程)
Generic(泛型) 编程是一种计算机编程的风格,在这种风格中,程序中的数据类型是不固定的(i.e. 广泛的类型),若想让这种不固定的类型固定下来,需要为其提供 类型参数 以便固定成具体的类型。这种编程风格由 1973 年的 ML 编程语言首创,允许编写通用函数或类型,这些函数或类型在使用时仅在操作的类型集上有所不同,从而减少了重复代码。
Generic 也可以看做是以一种特殊的数据类型,就像 string、int 等等数据类型一样,除了具备 Data type 的能力,还多了变化的能力。
假如现在有如下函数:
func g<T any>(i T){
print(typeof(i))
}
其中函数多了 <T any>
这部分,这就表明,这个函数中使用了泛型,这个广泛的类型标识符为 T(就像字符串的标识符为 string 之类的一样),可以让自己变成 any(任意) 的类型。
有的语言,比如 Go 语言,不是使用
[ ]
符号而不是< >
来标识泛型语法。
此时我们调用 g 函数
g<int>(1)
g<string>("1")
g<int>(1)
输出的结果为 int,g<string>("string")
输出的结果为 string。此时,调用是使用的 < >
可以理解为约束,就是让 g 函数中的 T 变为指定的类型。
比如使用 g<int>(1)
调用 g 函数时,这个函数相当于变成了 func g(i int){ print(typeof(i)) }
。
什么时候应该用泛型?
Ian 给出了简要的泛型使用方针,当开发者发现自己多次编写完全相同的代码,而这些副本之间的唯一区别仅在于使用了不同类型,这时候便可以考虑使用类型参数。换句话说,即开发者应避免使用类型参数,直到发现自己要多次编写完全相同的代码。
减少重复的代码
- 重复代码可能造成的问题:
- 安全隐患。当多块相同的代码其中一块逻辑修改时,其他相同的逻辑都要修改才能保证整体逻辑一致,但是重复代码过多时,忘记修改某块代码是很难避免的
- 不利于扩展。当有更多类型需要使用相同逻辑时,每次都要重新写一遍,不利于代码的可读性和可维护性。加重安全隐患。
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.