🔥个人主页:杨利杰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 至 80 | undefined |
| 大于 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 个a | undefined | 待填写 |
81 个a | 标题长度超出当前练习规则 | 待填写 |
这些是代码阅读得出的预期,不能代替实际运行结果。我会先构建,再在工程已有的合适执行位置调用示例,记录真实输出。
七、长度不能笼统写成“字符数”
原稿用“80 个字符”描述上限,容易让读者把字符串length与人眼看到的字符数量直接对应起来。这一口径需要单独说明。
常见 ArkTS/TypeScript 字符串语义中的length按 UTF-16 代码单元计数。部分表情或组合字符,显示为一个字符时可能占多个计数单位。
本篇的 80 与 81 都用 ASCII 字符a构造,便于观察边界。如果业务要求按用户感知字符计数,需要另行定义分割与计数规则;不能只改一条提示就完成适配。实际字符串接口以当前工具链文档为准。
此外,先trim()再计数,与对原始字符串计数是不同规则。测试记录要写明采用哪一种。
八、函数与页面各自负责什么
我会把校验规则保持为明确的输入输出,让页面事件负责读取输入、显示提示和安排下一步。
| 位置 | 本篇安排的职责 |
|---|---|
| 校验函数 | 处理标题、判断规则、返回结果 |
| 页面事件 | 读取输入、调用函数、处理失败与通过 |
| 后续业务层 | 按接口协议执行保存或提交 |
出现“函数返回错误,页面却继续提交”时,先检查调用方分支;出现“空格仍能通过”时,检查是否先规范化再计数;出现“界面没显示提示”时,再检查页面状态和提示接入。
不需要把每行代码拆成一个函数。只有一段逻辑能独立命名、输入输出清楚时,提取才更有帮助。
学习总结
这篇我用标题校验练习参数、返回类型和调用分支:先处理输入,再返回结果,最后由调用方决定是否继续。
发布前补齐 SDK、构建结果与实际输出表。下一篇继续学习接口、类和对象,区分字段结构约定与创建数据的方式。
参考资料
- 华为开发者联盟:ArkTS 语言概览
- 华为开发者文档:ArkTS 语法适配背景
- ECMAScript 规范:String 实例的 length
声明:本文为学习示例与练习方法,配图为知识示意图;实际语法支持、日志、构建与页面结果以当前工程和官方文档为准。
返回顶部