news 2026/10/20 12:00:14

【鸿蒙心迹】HarmonyOS学习笔记05:ArkTS函数约定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【鸿蒙心迹】HarmonyOS学习笔记05:ArkTS函数约定

🔥个人主页:杨利杰YJlio

❄️个人专栏:《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》

《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》

《超简单:用Python让Excel飞起来》

🌟让复杂的事情更简单,让重复的工作自动化

文章目录

    • 前言:把标题校验从按钮事件里拿出来
    • 一、参数与返回值构成函数约定
    • 二、先处理首尾空白,再判断长度
    • 三、用一份实现固定练习规则
    • 四、string 与 undefined 分别表示什么
    • 五、返回错误消息后,调用方仍要停止
    • 六、练习数据必须包含临界情况
    • 七、长度不能笼统写成“字符数”
    • 八、函数与页面各自负责什么
    • 学习总结
    • 参考资料

前言:把标题校验从按钮事件里拿出来

大家好,我是杨利杰 YJlio。

上一篇整理了变量和字段类型。这篇我继续处理一个很具体的问题:工单标题不能为空,也不能超过练习规定的长度。如果所有判断都写在按钮事件中,输入、规则和提示很容易混在一起。

我会把规则提取为validateTitle函数。函数接收标题,返回错误消息或undefined,由调用方决定停止还是继续。这是 HarmonyOS 7.0 学习笔记第 05 篇。

函数负责返回校验结果,调用方负责遵守这个结果。

环境项实际记录
DevEco Studio待填写
SDK/API待填写
工程当前 ArkTS 练习工程
练习内容标题输入、返回值与调用分支

配图为知识示意图,实际诊断、日志和构建结果不预先填写。

一、参数与返回值构成函数约定

函数参数说明“需要提供什么”,返回类型说明“可能得到什么”。我先把这两端写清楚,再实现判断。

functionisBlank(value:string):boolean{returnvalue.trim().length===0;}

这个函数接收一个字符串,返回布尔值。它可以回答“是否为空白”,却不负责显示提示,也不创建工单。

命名要与结果一致:isBlank是判断,validateTitle表达标题校验。明确输入和输出后,页面可以调用它,独立练习也可以使用同一规则。

二、先处理首尾空白,再判断长度

校验前我会用trim()取得处理后的字符串,避免只含空格的标题被视为有效内容。

constrawTitle:string=' 更换办公电脑 ';constnormalized:string=rawTitle.trim();

trim()返回新字符串,不会修改原字符串,也不会删除中间的空格。原始输入用于显示还是用于存储,应该按业务要求决定。

这篇只把规范化结果用于校验。如果后续提交要保存规范化标题,应在提交流程中明确使用该值;不能因为校验函数内部调用了trim(),就认为调用方的原值已改变。

三、用一份实现固定练习规则

本篇只保留一份validateTitle实现,避免前后示例返回不同消息。

functionvalidateTitle(title:string):string|undefined{constnormalized:string=title.trim();if(normalized.length===0){return'标题不能为空';}if(normalized.length>80){return'标题长度超出当前练习规则';}returnundefined;}
规范化后的长度本例返回
0标题不能为空
1 至 80undefined
大于 80标题长度超出当前练习规则

80 是本篇练习规则,不是 HarmonyOS、ArkTS 或输入组件的统一限制。

规则改变时,函数和边界样例一起修改。不要只更新提示文字,却保留原来的比较条件。

四、string 与 undefined 分别表示什么

本例返回类型是string | undefined:出现错误时返回消息,没有错误时返回undefined。

这一约定属于本函数,不是所有函数的通用规则。其他函数中的undefined可能表达缺失值或其他含义,调用前仍要阅读约定。

华为的ArkTS 语法适配背景说明,返回值可能缺失时,应在类型中表达这种可能性。调用方必须处理对应分支,不能用断言抹掉它。

我没有用空字符串表示“通过”,这样判断可以直接围绕undefined展开,不需要猜测消息是否为空。

五、返回错误消息后,调用方仍要停止

函数返回了错误,不代表按钮事件会自动结束。调用位置要明确安排失败和通过两条路径。

下面是调用逻辑示例,注释位置需要接入实际页面提示和提交代码:

functionhandleSubmit(inputTitle:string):void{consterrorMessage:string|undefined=validateTitle(inputTitle);if(errorMessage!==undefined){// 在实际页面中显示 errorMessage。return;}// 本例校验通过;在此继续实际业务流程。}

return结束当前handleSubmit调用,不会替其他函数停止执行。异步操作如果已经提前发起,也不会因为这里返回而自动取消。因此,应先检查,再安排后续写入。

返回错误消息不会自动阻止提交;失败分支要结束当前流程。

六、练习数据必须包含临界情况

我会准备空字符串、空白字符串、普通标题,以及处理后长度分别为 80 和 81 的输入。

constexamples:string[]=['',' ','更换办公电脑','a'.repeat(80),'a'.repeat(81)];for(constitemofexamples){constresult:string|undefined=validateTitle(item);console.info(result===undefined?'本例校验通过':result);}
输入按代码推导的预期本机实际返回
空字符串标题不能为空待填写
五个空格标题不能为空待填写
更换办公电脑undefined待填写
80 个aundefined待填写
81 个a标题长度超出当前练习规则待填写

这些是代码阅读得出的预期,不能代替实际运行结果。我会先构建,再在工程已有的合适执行位置调用示例,记录真实输出。

七、长度不能笼统写成“字符数”

原稿用“80 个字符”描述上限,容易让读者把字符串length与人眼看到的字符数量直接对应起来。这一口径需要单独说明。

常见 ArkTS/TypeScript 字符串语义中的length按 UTF-16 代码单元计数。部分表情或组合字符,显示为一个字符时可能占多个计数单位。

本篇的 80 与 81 都用 ASCII 字符a构造,便于观察边界。如果业务要求按用户感知字符计数,需要另行定义分割与计数规则;不能只改一条提示就完成适配。实际字符串接口以当前工具链文档为准。

此外,先trim()再计数,与对原始字符串计数是不同规则。测试记录要写明采用哪一种。

八、函数与页面各自负责什么

我会把校验规则保持为明确的输入输出,让页面事件负责读取输入、显示提示和安排下一步。

位置本篇安排的职责
校验函数处理标题、判断规则、返回结果
页面事件读取输入、调用函数、处理失败与通过
后续业务层按接口协议执行保存或提交

出现“函数返回错误,页面却继续提交”时,先检查调用方分支;出现“空格仍能通过”时,检查是否先规范化再计数;出现“界面没显示提示”时,再检查页面状态和提示接入。

不需要把每行代码拆成一个函数。只有一段逻辑能独立命名、输入输出清楚时,提取才更有帮助。

学习总结

这篇我用标题校验练习参数、返回类型和调用分支:先处理输入,再返回结果,最后由调用方决定是否继续。

发布前补齐 SDK、构建结果与实际输出表。下一篇继续学习接口、类和对象,区分字段结构约定与创建数据的方式。

参考资料

  1. 华为开发者联盟:ArkTS 语言概览
  2. 华为开发者文档:ArkTS 语法适配背景
  3. ECMAScript 规范:String 实例的 length

声明:本文为学习示例与练习方法,配图为知识示意图;实际语法支持、日志、构建与页面结果以当前工程和官方文档为准。

返回顶部

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 11:59:54

Dify完全指南:从零搭建LLM应用开发平台(涵盖RAG、Agent与部署)

这段时间我一直在折腾各种大模型相关的应用,前后用原生代码搭过客服机器人,也试过纯前端接模型接口做演示 Demo,最后发现一个很尴尬的事实:真正耗时间的不是“调用模型”,而是那些跟业务没半毛钱关系的工程问题。比如多…

作者头像 李华
网站建设 2026/10/20 11:57:18

CTF Web爆破专题刷题实战:从弱口令到验证码绕过的完整总结

最近在CTFshow刷WEB方向的爆破专题,一个系列刷下来收获比想象中多。爆破在CTF Web里属于那种看着简单、上手才发现水深得很的题型——说它简单,是因为核心思路就一句话:枚举加判定;说它水深,是因为题目里往往塞满了验证…

作者头像 李华
网站建设 2026/10/20 11:57:01

发票样板H5开发实战:版式拆解、数据填充与打印调优

“发票样板 H5”这几个字放在一起,第一反应就是要在浏览器里做出一张像模像样的发票样式页面,支持填数据、改金额、打印出来当样品。我做这个需求时,业务部门拿到的还是一张静态图片,改个公司名称就得找设计重新修图,改…

作者头像 李华
网站建设 2026/10/20 11:55:59

CP2102 Linux驱动安装与配置:Ubuntu下串口调试避坑指南

简介:这份资源是面向Linux平台、尤其是Ubuntu 11.04(内核2.6.38)用户的CP2102 USB转UART桥接芯片驱动程序,适合嵌入式开发者、硬件调试人员及物联网爱好者解决USB与串口通信的兼容性问题。压缩包内共4个文件,以C源码为…

作者头像 李华
网站建设 2026/10/20 11:55:54

MFC图片缩放实战:从GDI到GDI+与双线性插值算法详解

简介:这份资源面向具备一定C基础的MFC初学者与桌面应用开发者,聚焦在MFC框架下实现图片放大缩小的完整工程示例,帮助解决CStatic控件自定义绘图、位图缩放算法选择与用户交互控制等常见问题。压缩包共43个文件,约4.27MB&#xff0…

作者头像 李华
网站建设 2026/10/20 11:55:17

用CEL输入接管API数据采集:从脚本到配置的Elastic Agent集成实践

前阵子有个同事问我:一个Elastic Agent集成里,最让人头疼的部分是哪个?我几乎没犹豫就回答——不是Agent本身,也不是日志文件的采集,而是那些为了对接HTTP API而写的自定义脚本。日志类采集只要定义好消息模式&#xf…

作者头像 李华