HarmonyOS 鸿蒙Next函数重载问题

发布于 1周前 作者 caililin 来自 鸿蒙OS

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>

我认为如上设计可以给已有经验的程序员代码较好的体验。当前的设计有些繁琐,其在函数定义部分确实好像没有体验出代码的间接性。

希望可以修改一下,谢谢!!!

4 回复
+1,我也在想这个问题,始终还没想明白原因,难道是对效率有帮助,如果有回复了麻烦提醒下

这和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一会儿在第二个参数,一会儿在第三个参数,这什么鬼啊?

关于HarmonyOS鸿蒙Next的函数重载问题,首先需要明确的是,HarmonyOS是支持函数重载的。在HarmonyOS的开发环境中,你可以通过为同一个函数编写多个同名但参数列表不同的函数定义来实现函数重载。编译器会根据调用时提供的参数类型来选择相应的函数实现。

例如,你可以这样定义重载函数:

function foo(x: number): void;
function foo(x: string): void;
function foo(x: number | string): void {
  // 函数实现
}

在调用时,编译器会根据传入的参数类型自动匹配相应的函数定义。

如果你在使用HarmonyOS鸿蒙Next时遇到了函数重载相关的编译错误,请检查你的函数定义是否满足重载的条件,即同名且参数列表不同。如果确认无误但问题依旧存在,可能是由于其他编译配置或代码问题导致的。

HarmonyOS 鸿蒙Next入门实战在线学习:https://www.itying.com/goods-1205.html

回到顶部