开天辟地 HarmonyOS(鸿蒙) - ArkTS 类: function

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

开天辟地 HarmonyOS(鸿蒙) - ArkTS 类: function

示例如下:

pages\arkts\class\Function.ets

import { TitleBar, MyLog } from '../../TitleBar';@Entry
@Component
struct FunctionDemo {build() {Column() {TitleBar()Text("代码示例结合 HiLog 日志一起看")}}
}// 定义函数时要指定参数的类型和返回值的类型,无返回值时可以用 void 表示
function f1(x:number, y:number):number {return x + y;
}
function f2(x:string, y:string):void {}
// 返回值的类型也可以推导出来
function f3(x:number, y:number) {return x * y
}
// 允许在函数参数列表和调用时使用尾随逗号(这个逗号没有实际意义,只是为了可以方便地添加或删除参数)
function f4(x:number, y:number, ) {}
f4(1, 2)
f4(1, 2, ){// 不允许在块内使用类似如下的方式直接定义函数(typescript 是支持的)// function f0(name:string):string { return name; }// 可以在块内定义箭头函数let f1: (name: string) => string = (name: string): string => {return name;};// 可以在块内定义箭头函数(具体的函数类型不必声明,可以自动推导出来)let f2 = (name: string): string => {return name;};MyLog.d(f1("webabcd")); // webabcdMyLog.d(f2("webabcd")); // webabcd
}{// 参数默认值let a = (p1: string, p2: string = "webabcd"): string => {return `${p1} ${p2}`;}MyLog.d(`${a("hello", "wanglei")}, ${a("hello")}`);// hello wanglei, hello webabcd// 可选参数let b = (p1: string, p2?: string): string => {return `${p1} ${p2}`;}MyLog.d(`${b("hello", "wanglei")}, ${b("hello")}`);// hello wanglei, hello undefined// 通过 ... 定义剩余参数,用于接收指定类型的可变数量的参数let c = (p1: string, ...values: string[]) => {let result = "";for (let i = 0; i < values.length; i++) {result += values[i];}return `${p1} ${result}`;}MyLog.d(`${c("a", "b", "c", "d", "e")}`);// a bcde
}{// 箭头函数(lambda 表达式)let a = ():string => "hello"; // 无参数,通过一行表达式实现返回值let b = (p1:string, p2:string):string => `${p1} ${p2}`; // 多个参数,通过一行表达式实现返回值let c = (p1:string, p2:string):string => { // 通过多行表达式实现返回值(加上大括号即可)let result = `${p1} ${p2}`;return result;};MyLog.d(`${a()}, ${b("hello", "webabcd")}, ${c("hello", "webabcd")}`);// hello, hello webabcd, hello webabcd
}{// 通过函数声明(Function Declaration)的方式定义函数// 块外支持,块内不支持(typescript 无论块外还是块内都是支持的)// function f1(x: number, y: number): number { return x + y; }// 通过函数表达式(Function Expression)的方式定义函数let f2 = (x: number, y: number): number => {return x + y;};// 上面的函数 f2 的类型是推导出来的,如果写全的话就像下面这样// 这里的 => 不是 es6 中的箭头函数// 这里的 => 是用来定义函数类型的,左边是输入类型,需要用括号括起来,右边是输出类型let f3: (x: number, y: number) => number = (x: number, y: number): number => {return x + y;};
}{// 虽然不支持函数重载,但是可以通过如下方式达到函数重载的效果let myFunc = (x: number | string): number | string | void => {if (typeof x == 'number') {return x * 2;} else if (typeof x == 'string') {return `hello ${x}`;} else {// void}}MyLog.d(`${myFunc(100)}, ${myFunc("webabcd")}`); // 200, hello webabcd
}// 函数传参时,通过接口定义参数的形状
{interface MyOptions {name: string;age: number;hello: (name: string) => string;};let f1 = (options:MyOptions): string => {MyLog.d(options.hello(options.name)); // hello: webabcdreturn `${options.name} ${options.age}`;}let result = f1({ name:"webabcd", age:44, hello: (name: string) => {return `hello: ${name}`}})MyLog.d(result); // webabcd 44
}// 回调函数的示例
{type CallbackFunction1 = (n: number) => voidlet f1 = (callback: CallbackFunction1): void => {setTimeout(() => {callback(100)}, 1000)}f1((n: number): void => {MyLog.d(`${n}`) // 100})// 注:函数作为参数传递时,函数参数的数据类型和函数返回值的数据类型都可以省略f1((n) => {MyLog.d(`${n}`) // 100})let f2 = (x: number, callback1: (a: number, b: number) => number, callback2: (a: number, b: number) => number): void => {setTimeout(() => {let result1 = callback1(x + 2, x + 3)let result2 = callback2(x * 2, x * 3)MyLog.d(`${result1}, ${result2}`) // 205, 500}, 1000)}f2(100, (a, b) => {return a + b}, (a, b) => {return a + b})
}

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879059.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可能是对春节假期的一些总结

写在前面2603 字 | 总结 | 经历 | 思考 | 感触未经允许,禁止转载。 正文「我一直都应该知道,听到别人说出她的名字,我还是会心里一跳。」过年与我当初预计的完全不同。我当初的计划,春节七八天,写很多很多文章,极速推进今年年度计划的写作一项。为此还专门订阅了一个月的…

搜狗录音笔c1折腾

1.买的pdd厂家帮我整好了大部分(应该刷过固件) 2.遇到的问题就是c to c的线...它没有协商,得插电脑usb-a口上才能识别到 3.厂家提供的搜狗录音笔助手这个软件是有点小处理的不是原软件(指解锁登录,其他的没看出问题,至少软件没报毒)

task3

任务二:Smiling-Weeping-zhr/Travel-assistant 自建项目链接,有关大模型关于大模型解答旅游相关

1.4 条件分支和循环机制

程序的流程分为顺序执行、条件分支和循环三种 顺序执行是按照地址内容的顺序执行指令。 条件分支是根据条件执行任意地址的指令。 循环是指重复执行同一地址的指令。 顺序执行每执行一个指令程序计数器的值自动加1条件分支和循环中使用的跳转指令,会参照当前执行的运算结果来判…

vue3使用flv.js播放flv直播流

目前有个需求是:管理直播机有一个列表需要查看每个直播机的实时内容,所以需要在后台加这个功能。 效果:我用ffmpeg模拟推流: 如何用ffmpeg模拟推流请看我上一篇文章 网页: 如上是可以正确再网页端拉流,这个功能费了一天的时间,在这里免费分享出来。 首先安装flv.js(用n…

DeepSeep本地部署

1、浏览器搜索引擎更改 2、搜索:Ollama操作下载: 也可直接进入下载路径:https://ollama.com/download/windows ollama run deepseek-r1 本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/18699050

Linux下使用df与du命令查看磁盘空间

1、df磁盘空间查看df可以查看一级文件夹大小、使用比例、档案系统及其挂入点。[root@oms ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 40G 35G 3.1G 92% / devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmp…

JOKER智能可视化平台 20250204版本更新说明

本次 JOKER 低代码平台更新涵盖了代码生成、环境变量、可视化开发工具等多个关键领域的优化与新增功能,致力于为开发者提供更高效、更安全、更便捷的开发体验。同时,服务端功能的正式发布以及核心升级,进一步增强了平台的整体性能和竞争力。 一、功能更新与优化 (一)代码生…

城市智慧升级:超算与智算的协同效应

随着数字化转型的不断深入,城市高质量发展越来越依赖于强大的算力支持。结合超级计算(超算)和智能计算(智算)的“超算+智算”模式,正在成为推动城市创新和智能化发展的重要力量。超算与智算的结合超级计算通常指的是使用最先进的计算机硬件和软件进行大规模科学计算的技术…

linux安装适用glibc2.17的nodejs高版本

从nodejs18开始需要的glibc版本要>2.28,这对有些系统是不支持的,除了官方的下载地址外,还有个地址可以下载适用2.17的nodejs高版本。 https://unofficial-builds.nodejs.org/download/release/ 对于linux平台直接下载解压使用即可。本帖子也是纯手工制作,转载请标明出处…

安卓苹果手机通用的便签备忘录APP哪个好用?

每次换手机最头疼的不是适应新系统,而是发现旧手机里800条备忘和灵感,全都困在品牌的生态孤岛里! 无论是小米换iPhone还是华为跳三星,系统自带的备忘录就像「前任的日记本」,永远无法在新欢身上打开。 这时候你就需要一款真正打破系统壁垒的「跨平台同步便签/备忘录APP」!…