是否支持函数重载
什么是函数重载
函数重载即允许定义多个同名函数,在调用时,会根据参数情况调用其中的一个函数。比如:
function foo(s: string) { return s + 1 }
function foo(s: int) { return s + 1}
foo("a") // => "a1"
foo(3) // => 4
假如不支持函数重载,一旦需要实现相同相同、但参数不同的函数,就需要取不同的名字。这些名字会增加记忆的负担。
但如果支持函数重载,阅读代码时,无法简单通过函数名确定要调用的函数。
主流语言的支持现状
目前支持函数重载的语言有:C++、Java、C#、Kotlin、Swift。
C、Go和其他脚本语言均不支持函数重载。
可选方案
方案1:支持函数重载(同 C++、Java、C#、Kotlin、Swift)
方案2:支持函数重载,但所有重载添加 partial
修饰符以增加可读性
方案3:不支持函数重载(同 C、Go)
方案4:不支持函数重载,但支持添加重载签名(同 TS)
问题的研究
语言已经支持默认参数、联合类型、变长参数,以上功能组合使用,可以取代多数的函数重载,比如:
function foo(s: int | string, default = 0) {
return s + default
}
但还有若干场景,仍然不如用函数重载更清晰:
1) 函数的返回类型需要根据参数变化。
2) 需要为不同的重载编写不同的文档。
最终决策
暂采纳方案4。