鸿蒙跨端框架Flutter学习day 1、变量与基本类型-咖啡店点餐逻辑

目录

  • [一、 逻辑的起点:变量建模](#一、 逻辑的起点:变量建模)
  • [二、 深入浅出:var, final 与 const 的点餐实践](#二、 深入浅出:var, final 与 const 的点餐实践)
  • [三、 延迟的艺术:late 关键字与总价计算](#三、 延迟的艺术:late 关键字与总价计算)
  • [四、 实战解析:点餐逻辑的代码实现](#四、 实战解析:点餐逻辑的代码实现)
  • [五、 结语](#五、 结语)

一、 逻辑的起点:变量建模

在开发鸿蒙跨端应用时,第一步往往不是画 UI,而是对业务进行"变量建模"。想象一个咖啡店点餐场景,我们需要记录哪些信息?咖啡的名字、单价、数量、是否加浓。这些信息在代码中就转化为了不同类型的变量。

二、 深入浅出:var, final 与 const 的点餐实践

特性维度 var (ArkTS) final (ArkTS) const (ArkTS)
核心语义 声明函数级作用域变量(兼容 ES5) 标记「不可重新赋值」的变量(块级作用域) 声明编译期/运行时常量(块级作用域,不可变)
变量可变性 可重复赋值、可重复声明 不可重新赋值(引用不变,对象/数组内容可变) 不可重复赋值、不可重复声明(引用和基础类型值均不可变)
作用域 函数级作用域(无块级隔离) 块级作用域(if/for/{} 可隔离) 块级作用域(if/for/{} 可隔离)
变量提升 存在(声明提升,赋值不提升) 无(暂时性死区) 无(暂时性死区)
重复声明 同一作用域允许重复声明 同一作用域禁止重复声明 同一作用域禁止重复声明
初始化要求 可先声明后赋值(如 var a; 局部变量:必须初始化;类成员变量:可延迟初始化 必须立即初始化(如 const a = 1;),且值需确定
适用数据类型 支持所有类型 支持所有类型(对象/数组/基础类型) 基础类型(number/string/boolean)、字面量对象/数组(不可改引用)
典型使用场景 兼容老 JS 代码(不推荐使用) 声明无需重新赋值的变量(如函数入参、临时计算值) 声明固定配置(如接口地址、常量值、枚举值)

2.1 动态推断 (var)

当你不想显式写出 Stringint 时,var 是你的好帮手。

dart 复制代码
var coffeeName = "拿铁 (Latte)"; // 自动推断为 String

2.2 不可变的约束 (final)

在点餐过程中,一旦下单,某些信息是不允许修改的。final 声明的变量只能赋值一次。

dart 复制代码
final orderTime = DateTime.now(); // 运行时确定的下单时间

2.3 极致的静态 (const)

如果咖啡店的名字是全球统一且永远不变的,我们应该使用 const。它在编译阶段就确定了值,性能最优。

dart 复制代码
const brandName = "Harmony Coffee"; // 编译时常量

三、 延迟的艺术:late 关键字与总价计算

在我们的 CoffeeOrderDemo 示例中,有一个有趣的现象:总价 totalPrice 依赖于数量和加浓选项,它无法在类实例化的一瞬间就完全确定。

dart 复制代码
late double totalPrice; // 延迟初始化

使用 late 关键字,我们告诉 Dart 编译器:"我知道现在还没给它赋值,但我保证在页面渲染(build)之前,我一定会通过 _updateTotal() 方法算出来。" 这种处理方式在 Flutter 的逻辑层非常常见。

四、 实战解析:点餐逻辑的代码实现

lib/main.dart 中,我们通过以下核心逻辑实现了点餐计算:

dart 复制代码
void _updateTotal() {
  setState(() {
    // 计算公式:(单价 * 数量) + 加浓费(5元)
    totalPrice = (unitPrice * quantity) + (extraShot ? 5.0 : 0.0);
  });
}
  • 数据类型应用unitPrice (double) 处理小数,quantity (int) 处理整数,extraShot (bool) 处理开关。
  • 状态驱动 :当我们调用 setState 时,这些变量的新值会立即反映在 UI 上的"应付总额"中。

五、 结语

变量是程序的"记忆",而正确的声明方式则是"记忆的规则"。在 Day 1 的学习中,通过咖啡店点餐这个贴近生活的案例,我们不仅学会了如何存储数据,更理解了如何通过变量的变化来驱动 UI 的更新。这是 Flutter 开发最基础,也是最核心的逻辑。


欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

相关推荐
لا معنى له2 小时前
学习笔记:少样本学习
人工智能·笔记·深度学习·学习·机器学习
未定义.2212 小时前
第3篇:UI自动化核心操作:输入、点击、弹窗、下拉框全场景实战
运维·python·ui·自动化·jenkins·集成测试·pytest
am心2 小时前
学习笔记-菜品接口-删除菜品
笔记·学习
لا معنى له2 小时前
学习笔记:目标跟踪内涵、方法及经典模型
人工智能·笔记·学习·计算机视觉·目标跟踪
何以不说话2 小时前
记录一下学习日常⑨(ansible、Open-V、zabbix)
学习·ansible·zabbix
saoys2 小时前
Opencv 学习笔记:文字图像预处理(二值化 + 闭运算优化)
笔记·opencv·学习
wdfk_prog2 小时前
[Linux]学习笔记系列 -- compiler
linux·笔记·学习
DowneyJoy3 小时前
【Unity通用工具类】列表扩展方法ListExtensions
unity·c#·交互
菜鸟小芯3 小时前
【开源鸿蒙跨平台开发先锋训练营】Day2 OpenHarmony版Flutter 3.27版本开发环境搭建
flutter·harmonyos