【鸿蒙心迹】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

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

返回顶部

相关新闻

Trackformer多目标跟踪复现:从环境搭建到ID跳变排查的完整实践

Trackformer多目标跟踪复现:从环境搭建到ID跳变排查的完整实践

1. 从标题拆解这个项目到底在做什么1.1 目标跟踪与轨迹识别,到底解决的是什么问题先把概念说清楚。目标跟踪(Object Tracking)要回答的问题是:在视频里,某一帧出现了一个我关心的目标,接下来的每一帧里&…

2026/10/20 12:00:58 阅读更多 →
开源多智能体项目:三个AI角色交叉质询,收敛出可执行方案

开源多智能体项目:三个AI角色交叉质询,收敛出可执行方案

前段时间我一直在折腾多智能体相关的开源项目,最直观的感受是:模型本身的能力已经够用了,真正让人头疼的是怎么让几个模型像一支团队那样配合起来,而不是各说各话。直到我看到这个项目的思路,才觉得终于有人把“让顶级…

2026/10/20 12:00:58 阅读更多 →
Formula One 表格控件实战:从注册到公式校验的完整指南

Formula One 表格控件实战:从注册到公式校验的完整指南

简介:Formula One 9.0 是一款基于 Java 开发的 VTS 内容编辑工具,面向需要定期制作与定制模板化内容的个人用户及小型团队。它通过模板化编辑方式简化 VTS 内容的创建流程,降低重复劳动,适合对图形化编辑与 XML 数据处理有需求的办…

2026/10/20 12:00:57 阅读更多 →

最新新闻

提示词模板化:从基础到高级的Prompt Engineering实战指南

提示词模板化:从基础到高级的Prompt Engineering实战指南

1. 为什么要把提示词做成模板:从重复劳动到可复用资产先讲一个我自己的经历。早期用对话式AI干活的时候,每次都是临时想提示词,想到哪写到哪:“帮我总结一下这段文字”“写一个产品介绍,要专业一点”。这种随手写的做法…

2026/10/20 12:46:33 阅读更多 →
Kafka入门进阶:分区、副本、acks与消费者组核心机制详解

Kafka入门进阶:分区、副本、acks与消费者组核心机制详解

1. 从“能跑起来”到“跑得明白”:Kafka 基础入门的第二道坎很多人第一次接触 Kafka,都是照着官方 Quickstart 敲一遍命令行,看到生产者发消息、消费者收到消息,就觉得“我会了”。但真到了项目里,面对一堆server.prop…

2026/10/20 12:46:33 阅读更多 →
SpringBoot+Vue图书推荐系统源码解析:协同过滤与前后端分离实战

SpringBoot+Vue图书推荐系统源码解析:协同过滤与前后端分离实战

最近我在帮几位同学梳理毕业设计项目,被问得最多的就是“图书推荐系统”。这类题到现在依旧热门,原因也很简单:图书天然适合做推荐,用户行为数据容易理解,和电商推荐、短视频推荐比起来业务逻辑更干净,特别…

2026/10/20 12:46:33 阅读更多 →
技能不是标签而是动作:用刻意练习、反馈与复盘构建底层能力

技能不是标签而是动作:用刻意练习、反馈与复盘构建底层能力

很多人都把“技能”当成一个名词来理解,觉得自己会写代码、会做PPT、会剪辑视频,就算拥有一项技能。但真正带过人、自己从零啃过几门硬技能的人会知道,技能其实是动词——它是你每天都要做的一个动作,而不是简历上既能唬人又能自我…

2026/10/20 12:46:33 阅读更多 →
把涂鸦设备搬回局域网:Tuya-Local 本地控制与 Home Assistant 配置指南

把涂鸦设备搬回局域网:Tuya-Local 本地控制与 Home Assistant 配置指南

把涂鸦设备搬回局域网:Tuya-Local 本地控制与 Home Assistant 配置指南 【免费下载链接】tuya-local Local support for Tuya devices in Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/tu/tuya-local Tuya-Local 是 Home Assistant 的一个…

2026/10/20 12:46:33 阅读更多 →
MCP协议驱动智能体底座架构设计:从插件思维到接口思维

MCP协议驱动智能体底座架构设计:从插件思维到接口思维

1. 从“插件思维”到“接口思维”的认知跃迁大多数人第一次接触MCP(Model Context Protocol,模型上下文协议)时,脑子里蹦出来的第一个词就是“插件系统”。这也不奇怪,毕竟它的外在表现确实像插件:你写一个…

2026/10/20 12:45:32 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →