HarmonyOS 鸿蒙Next函数重载问题
HarmonyOS 鸿蒙Next函数重载问题
我在学习到ArkTs函数重载时感觉不懂为何这样设计,
当前设计:
function foo(x: number): void; /* 第一个函数定义 /
function foo(x: string): void; / 第二个函数定义 /
function foo(x: number | string): void { / 函数实现 /
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
我还是明白为什么需要定义两个函数,然后在进行对函数的实现,不能直接使用函数实现不就可以?
如上,直接只需要填写实现部分的代码:
function foo(x: number | string): void { / 函数实现 */
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
也可以达到完成函数重载的效果。不过这设计需要再函数中判断参数的类型还是比较麻烦的。为什么不能类是C/C++、java,等语言来实现函数如下:
function foo(x: number): void{
}
function foo(x: string): void{
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
我认为如上设计可以给已有经验的程序员代码较好的体验。当前的设计有些繁琐,其在函数定义部分确实好像没有体验出代码的间接性。
希望可以修改一下,谢谢!!!
这和ArkTS木有关系,是JS的做法,因为ArkTS是建立在JS>TS>ArkTS这种演进关系上;
建议看看《JS权威指南》/ JavaScript Definitive Guide;
没用过JS,从Java等强类型语言过来的小伙伴一定要先看看JS/TS/Node.js,对理解ArkTS及API有益处;
参考以下帖子,有相关资源链接:
https://developer.huawei.com/consumer/cn/forum/topic/0201148249041563381?fid=0101587866109860105
我也觉得这个设计很脑残,方法的重载几乎是废的。他这个设计,方法的参数是递增关系,不是变化关系。
比如:
function test(a: string, name: string, city: string)
function test(a: string, age: number, name: string)
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
按照他的设计,你的实现方法就要是:
function test(a: string, nameOrAge: string | number, cityOrName: string) {
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
好,从某种意义上来说,是写出来了,但是这个业务逻辑怎么写?简直多此一举啊。name一会儿在第二个参数,一会儿在第三个参数,这什么鬼啊?