鸿蒙 ArkTS 实战:煮饭水量的状态建模、核心算法与交互实现

前言

煮饭水量是一款米水比例计算工具,用于按大米量、米种和口感偏好估算煮饭需要的加水毫升数。
项目以 ArkTS 表达状态和规则,以 ArkUI 构建交互界面,主要状态包括 riceCups、riceType、texture、water。
页面围绕 分段基础量、口感修正、半杯粒度与毫升取整 形成从输入、计算到反馈的完整链路。
默认场景为2 量杯东北米、适中口感、结果尚未计算,运行后能够直接观察建议加水毫升数或等待计算提示。
本文只分析当前 Index.ets 已实现的真实能力,并结合源码推导关键数据变化。
在这里插入图片描述
图 1:DevEco Studio 支持 ArkTS 编辑、构建和调试,本文页面可在该环境中运行。

状态驱动页面的核心,是让每个结果都能回到确定的输入和业务规则。
边界条件必须进入实际代码路径,而不能只停留在界面提示中。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 这也是本文分析煮饭水量时的第一条主线。
当前项目采用本地内存状态,不包含源码之外的持久化、账号或云端同步能力。

一、米水比例的变量拆分

1.1 数据与结构

煮饭水量围绕米水比例的变量拆分组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

1.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

1.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

1.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

米水比例的变量拆分维度 当前实现 页面作用
状态 riceCups、riceType、texture、water 保存业务数据
规则 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 生成建议加水毫升数或等待计算提示
边界 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 阻止无效状态
反馈 建议加水毫升数或等待计算提示 形成可读结论

二、米种基础水量映射

2.1 数据与结构

煮饭水量围绕米种基础水量映射组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

2.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

2.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

2.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

三、口感修正值的来源

3.1 数据与结构

煮饭水量围绕口感修正值的来源组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

3.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

3.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

3.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

  1. 读取当前状态并确认输入范围。
  2. 调用成员函数计算或更新目标数据。
  3. 应用阈值、数组复制、取整或范围保护。
  4. 由 ArkUI 读取新状态并刷新结果。

四、量杯数与毫升换算

4.1 数据与结构

煮饭水量围绕量杯数与毫升换算组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

4.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

4.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

4.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

量杯数与毫升换算维度 当前实现 页面作用
状态 riceCups、riceType、texture、water 保存业务数据
规则 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 生成建议加水毫升数或等待计算提示
边界 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 阻止无效状态
反馈 建议加水毫升数或等待计算提示 形成可读结论

五、结果取整的展示意义

5.1 数据与结构

煮饭水量围绕结果取整的展示意义组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

5.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

5.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

5.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

六、Select 与按钮组的分工

6.1 数据与结构

煮饭水量围绕Select 与按钮组的分工组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

6.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

6.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

6.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

  • 煮饭水量只保存需要持续观察的业务状态。
  • calculate 及相关函数承担当前场景的核心更新。
  • 建议加水毫升数或等待计算提示把内部数据转换成可理解反馈。
  • 分段基础量、口感修正、半杯粒度与毫升取整共同保证结果稳定。

七、未计算状态的表达

7.1 数据与结构

煮饭水量围绕未计算状态的表达组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

7.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

7.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

7.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

八、三种米种的样例推导

8.1 数据与结构

煮饭水量围绕三种米种的样例推导组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

8.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

8.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

8.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

三种米种的样例推导维度 当前实现 页面作用
状态 riceCups、riceType、texture、water 保存业务数据
规则 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 生成建议加水毫升数或等待计算提示
边界 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 阻止无效状态
反馈 建议加水毫升数或等待计算提示 形成可读结论

九、ArkTS 页面入口与组件职责

9.1 数据与结构

煮饭水量围绕ArkTS 页面入口与组件职责组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

9.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

9.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

9.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

  1. 读取当前状态并确认输入范围。
  2. 调用成员函数计算或更新目标数据。
  3. 应用阈值、数组复制、取整或范围保护。
  4. 由 ArkUI 读取新状态并刷新结果。

十、@State 响应式状态链路

10.1 数据与结构

煮饭水量围绕@State 响应式状态链路组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

10.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

10.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

10.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

十一、业务函数与界面构建分离

11.1 数据与结构

煮饭水量围绕业务函数与界面构建分离组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

11.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

11.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

11.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

  • 煮饭水量只保存需要持续观察的业务状态。
  • calculate 及相关函数承担当前场景的核心更新。
  • 建议加水毫升数或等待计算提示把内部数据转换成可理解反馈。
  • 分段基础量、口感修正、半杯粒度与毫升取整共同保证结果稳定。

十二、ArkUI 控件的事件回调

12.1 数据与结构

煮饭水量围绕ArkUI 控件的事件回调组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

12.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

12.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

12.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

ArkUI 控件的事件回调维度 当前实现 页面作用
状态 riceCups、riceType、texture、water 保存业务数据
规则 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 生成建议加水毫升数或等待计算提示
边界 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 阻止无效状态
反馈 建议加水毫升数或等待计算提示 形成可读结论

十三、声明式刷新与结果派生

13.1 数据与结构

煮饭水量围绕声明式刷新与结果派生组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

13.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

13.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

13.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

十四、输入边界和异常值保护

14.1 数据与结构

煮饭水量围绕输入边界和异常值保护组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

14.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

14.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

14.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

十五、页面布局与信息层级

15.1 数据与结构

煮饭水量围绕页面布局与信息层级组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

15.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

15.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

15.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

  1. 读取当前状态并确认输入范围。
  2. 调用成员函数计算或更新目标数据。
  3. 应用阈值、数组复制、取整或范围保护。
  4. 由 ArkUI 读取新状态并刷新结果。

十六、颜色文字与状态反馈

16.1 数据与结构

煮饭水量围绕颜色文字与状态反馈组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

16.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

16.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

16.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

颜色文字与状态反馈维度 当前实现 页面作用
状态 riceCups、riceType、texture、water 保存业务数据
规则 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 生成建议加水毫升数或等待计算提示
边界 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 阻止无效状态
反馈 建议加水毫升数或等待计算提示 形成可读结论

十七、默认数据的首次运行

17.1 数据与结构

煮饭水量围绕默认数据的首次运行组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

17.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

17.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

17.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

十八、连续操作下的状态迁移

18.1 数据与结构

煮饭水量围绕连续操作下的状态迁移组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
water 初始为 0,因此结果区域在计算前显示明确的等待状态。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

18.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

18.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

18.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

  • 煮饭水量只保存需要持续观察的业务状态。
  • calculate 及相关函数承担当前场景的核心更新。
  • 建议加水毫升数或等待计算提示把内部数据转换成可理解反馈。
  • 分段基础量、口感修正、半杯粒度与毫升取整共同保证结果稳定。

十九、关键路径的验证方法

19.1 数据与结构

煮饭水量围绕关键路径的验证方法组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

19.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

19.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

19.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

二十、性能与可维护性分析

20.1 数据与结构

煮饭水量围绕性能与可维护性分析组织数据,riceCups、riceType、texture、water分别承担输入、过程或结果状态。
偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 该设计与“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”的操作顺序直接对应。

20.2 规则与原因

本节对应的核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
煮饭水量把关键判断集中到 calculate 及相关成员逻辑中,build 主要读取结果并声明组件。

20.3 交互与刷新

用户操作页面后,事件回调写回 riceCups、riceType、texture、water 中对应字段,依赖状态的组件随之刷新。
最终反馈为建议加水毫升数或等待计算提示,因此每次操作都能找到明确的可见结果。

20.4 边界与结论

当前实现遵守的边界是:量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
煮饭水量在输入或业务层处理该边界,避免异常值继续进入分段基础量、口感修正、半杯粒度与毫升取整。

性能与可维护性分析维度 当前实现 页面作用
状态 riceCups、riceType、texture、water 保存业务数据
规则 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 生成建议加水毫升数或等待计算提示
边界 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 阻止无效状态
反馈 建议加水毫升数或等待计算提示 形成可读结论

二十一、真实源码分段解读

21.1 源码片段 1

以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。

@Entry
@Component
struct Index {
  @State riceCups: number = 2;
  @State riceType: string = '东北米';

这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。

21.2 源码片段 2

以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。

  @State texture: string = '适中';
  @State water: number = 0;
  calculate(): void {
    let base: number = this.riceType === '糙米' ? 260 : this.riceType === '泰国香米' ? 190 : 210;
    let adjust: number = this.texture === '偏软' ? 20 : this.texture === '偏硬' ? -15 : 0;

这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。

21.3 源码片段 3

以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。

    this.water = Math.round(this.riceCups * (base + adjust));
  }
  build() {
    Column() {
      Text('煮饭水量').fontSize(28).fontWeight(FontWeight.Bold).width('100%')

这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。

21.4 源码片段 4

以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。

      Text('按米量、米种与口感估算加水量').fontSize(14).fontColor('#667085').width('100%').margin({ top: 6 })
      Column() {
        Text(this.riceCups.toFixed(1)).fontSize(48).fontWeight(FontWeight.Bold).fontColor('#A15C00')
        Text('量杯大米').fontSize(14).fontColor('#667085')
      }.width('100%').padding(20).margin({ top: 24 }).backgroundColor('#FFF7E8').borderRadius(12)

这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。

21.5 源码片段 5

以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。

      Text('大米用量').fontSize(16).margin({ top: 22 }).width('100%')
      Slider({ value: this.riceCups, min: 0.5, max: 8, step: 0.5 }).onChange((v: number) => this.riceCups = v).width('100%')
      Text('米种').fontSize(15).fontColor('#667085').margin({ top: 16 }).width('100%')
      Select([{ value: '东北米' }, { value: '泰国香米' }, { value: '糙米' }]).value(this.riceType).width('100%').onSelect((i: number) => this.riceType = i === 0 ? '东北米' : i === 1 ? '泰国香米' : '糙米')
      Text('口感').fontSize(15).fontColor('#667085').margin({ top: 16 }).width('100%')

这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。

21.6 源码片段 6

以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。

      Row() {
        ForEach(['偏硬', '适中', '偏软'], (v: string) => { Button(v).layoutWeight(1).margin({ right: v === '偏软' ? 0 : 8 }).backgroundColor(this.texture === v ? '#A15C00' : '#E8ECF0').fontColor(this.texture === v ? '#FFFFFF' : '#344054').onClick(() => this.texture = v) })
      }.width('100%').margin({ top: 8 })
      Button('计算加水量').width('100%').height(48).margin({ top: 24 }).onClick(() => this.calculate())
      Text(this.water === 0 ? '点击计算查看结果' : '建议加水 ' + this.water + ' 毫升').fontSize(21).fontWeight(FontWeight.Bold).textAlign(TextAlign.Center).width('100%').padding(18).margin({ top: 14 }).backgroundColor('#F6F8FA').borderRadius(10)

这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。

21.7 源码片段 7

以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。

    }.width('100%').height('100%').padding(24).backgroundColor('#FFFFFF')
  }
}

这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。

21.8 源码片段 8

以下代码直接取自煮饭水量页面,对应前文分析的状态、函数或组件。

  calculate(): void {

这段源码参与按大米量、米种和口感偏好估算煮饭需要的加水毫升数,需要结合相邻状态和回调共同理解。

二十二、典型运行案例

22.1 默认数据

使用2 量杯东北米、适中口感、结果尚未计算启动,核对建议加水毫升数或等待计算提示。
验证时同时观察 riceCups、riceType、texture、water 和结果文案,确保页面结论可以从源码复算。
煮饭水量需要重复执行该场景,确认数组顺序、累计值或布尔状态没有保留旧结果。

22.2 最小边界

将参数调整到最小范围,验证量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换。
验证时同时观察 riceCups、riceType、texture、water 和结果文案,确保页面结论可以从源码复算。
煮饭水量需要重复执行该场景,确认数组顺序、累计值或布尔状态没有保留旧结果。

22.3 临界输入

围绕分段基础量、口感修正、半杯粒度与毫升取整分别测试阈值前、阈值本身和阈值后。
验证时同时观察 riceCups、riceType、texture、water 和结果文案,确保页面结论可以从源码复算。
煮饭水量需要重复执行该场景,确认数组顺序、累计值或布尔状态没有保留旧结果。

22.4 连续操作

连续调用与 calculate 相关的操作,观察状态是否准确累积或恢复。
验证时同时观察 riceCups、riceType、texture、water 和结果文案,确保页面结论可以从源码复算。
煮饭水量需要重复执行该场景,确认数组顺序、累计值或布尔状态没有保留旧结果。

验证维度 当前实现 页面作用
状态 riceCups、riceType、texture、water 保存业务数据
规则 米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入 生成建议加水毫升数或等待计算提示
边界 量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换 阻止无效状态
反馈 建议加水毫升数或等待计算提示 形成可读结论

二十三、实现中的技术取舍

23.1 本地状态

煮饭水量的当前数据量适合由组件状态直接承载,所有变化都能在页面内追踪。
分段基础量、口感修正、半杯粒度与毫升取整构成该项目最重要的实现取舍。

23.2 具名函数

calculate 为关键行为提供明确入口,使业务规则和组件布局保持分离。
分段基础量、口感修正、半杯粒度与毫升取整构成该项目最重要的实现取舍。

23.3 声明式组件

界面直接读取 riceCups、riceType、texture、water,状态变化后不需要手动查找并修改节点。
分段基础量、口感修正、半杯粒度与毫升取整构成该项目最重要的实现取舍。

23.4 清晰边界

量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换,因此极端输入不会生成难以解释的结果。
分段基础量、口感修正、半杯粒度与毫升取整构成该项目最重要的实现取舍。

二十四、总结

煮饭水量使用鸿蒙 ArkTS 完成了“按大米量、米种和口感偏好估算煮饭需要的加水毫升数”这一业务闭环。
状态层由 riceCups、riceType、texture、water 构成,关键行为围绕 calculate 和相关表达式展开。
核心规则是:米种选择基础毫升数,口感叠加正负修正值,再用量杯数相乘并四舍五入。
源码通过量杯数限制在 0.5 到 8;口感只在偏硬、适中、偏软三种状态中切换保证临界状态仍然稳定。
状态建模 决定数据关系,业务函数 决定规则是否可复算,ArkUI 组件树 决定反馈是否及时。
东北米每量杯基础水量为 210ml,泰国香米为 190ml,糙米为 260ml。 偏软增加 20ml,偏硬减少 15ml,适中不额外修正。 water 初始为 0,因此结果区域在计算前显示明确的等待状态。


相关资源:

Logo

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

更多推荐