杨利杰YJlio博客头图

ArkTS函数参数与返回值

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

大家好,我是杨利杰 YJlio。

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

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

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

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

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

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

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

函数输入与输出的约定

function isBlank(value: string): boolean {
  return value.trim().length === 0;
}

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

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

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

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

先规范输入再校验

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

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

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

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

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

工单标题的练习规则

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

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

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

四、string 与 undefined 分别表示什么

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

错误消息与undefined的含义

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

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

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

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

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

调用方处理校验结果

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

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

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

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

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

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

空值与临界长度练习

const examples: string[] = [
  '',
  '     ',
  '更换办公电脑',
  'a'.repeat(80),
  'a'.repeat(81)
];

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

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

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

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

字符串length的计数边界

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

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

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

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

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

校验函数与页面职责

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

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

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

学习总结

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

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

参考资料

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

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

分隔线

返回顶部

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐