【成长纪实】Dart 与 ArkTS 函数与类的对比学习:从 Flutter 到 HarmonyOS - 实践

news/2025/11/15 8:03:43/文章来源:https://www.cnblogs.com/gccbuaa/p/19224163

Dart 和 ArkTS 都是现代、响应式的语言,分别作为 Flutter 和 HarmonyOS 应用开发的核心。它们在语法上颇有相似之处(都受到 C++、Java、JavaScript/TypeScript 家族的影响),但在设计哲学和具体实现上又各有侧重。理解它们在函数和类上的差异,是高效进行跨平台学习的关键。

一、 函数对比

1. 基本函数定义

  • Dart: 类型注解是可选的,但推荐使用。返回值类型、参数类型都可以省略(此时为 dynamic)。

    dart

    // Dart
    int add(int a, int b) {return a + b;
    }// 类型省略版本 (不推荐在生产环境使用)
    add(a, b) {return a + b;
    }
  • ArkTS: 作为 TypeScript 的超集,类型是强制的。这提供了更好的静态检查和开发体验。

    typescript

    // ArkTS
    add(a: number, b: number): number {return a + b;
    }

2. 箭头函数 (Lambda/匿名函数)

  • Dart: 对于只有一个表达式的函数,可以使用箭头语法 =>。它隐含了 return

    dart

    // Dart
    int add(int a, int b) => a + b;
    var list = [1, 2, 3];
    var doubled = list.map((e) => e * 2).toList();
  • ArkTS: 同样支持箭头函数,语法与 JavaScript/TS 一致。

    typescript

    // ArkTS
    const add = (a: number, b: number): number => a + b;
    let list: number[] = [1, 2, 3];
    let doubled = list.map((e: number) => e * 2);

3. 参数类型

可选参数与默认参数:

  • Dart: 提供了两种可选参数机制。

    • 命名可选参数: 使用 {} 包裹,调用时使用 paramName: value 的形式。

      dart

      // Dart
      void introduce({String name = '匿名', int age = 0}) {print('我是$name, 今年$age岁。');
      }
      introduce(name: '张三', age: 20); // 调用
      introduce(age: 25); // 调用
    • 位置可选参数: 使用 [] 包裹,按顺序传递。

      dart

      // Dart
      void introduce(String name, [int age = 0]) {print('我是$name, 今年$age岁。');
      }
      introduce('李四', 30); // 调用
      introduce('王五'); // 调用
  • ArkTS: 语法更接近 TypeScript,使用 ? 标识可选参数,并可直接在参数列表中赋默认值。

    typescript

    // ArkTS
    introduce(name: string = '匿名', age?: number): void {console.log(`我是${name}, 今年${age}岁。`);
    }
    introduce('张三', 20); // 调用
    introduce('李四'); // 调用,age 为 undefined

4. 异步函数

  • Dart: 使用 async/await 关键字。异步函数返回 Future<T> 类型。

    dart

    // Dart
    Future fetchUserData() async {// 模拟网络请求await Future.delayed(Duration(seconds: 1));return 42;
    }void main() async {var data = await fetchUserData();print(data); // 输出: 42
    }
  • ArkTS: 同样使用 async/await,但返回类型是 Promise<T>

    typescript

    // ArkTS
    async fetchUserData(): Promise {// 模拟网络请求await new Promise(resolve => setTimeout(resolve, 1000));return 42;
    }async function main() {let data = await fetchUserData();console.log(data); // 输出: 42
    }

二、 类对比

1. 基本类定义与构造函数

  • Dart: 构造函数可以有多种形式。this. 语法用于简化参数赋值。

    dart

    // Dart
    class Person {String name;int age;// 标准构造函数Person(this.name, this.age);// 命名构造函数Person.newBorn() {name = '新生儿';age = 0;}// 方法void introduce() {print('我是$name, 今年$age岁。');}
    }
  • ArkTS: 使用 constructor 关键字定义构造函数。属性通常在构造函数参数中直接声明。

    typescript

    // ArkTS
    class Person {name: string;age: number;// 构造函数constructor(name: string, age: number) {this.name = name;this.age = age;}// 方法introduce(): void {console.log(`我是${this.name}, 今年${this.age}岁。`);}
    }

2. 继承

  • Dart: 使用 extends 继承,使用 super 调用父类构造函数和方法。

    dart

    // Dart
    class Student extends Person {String major;Student(String name, int age, this.major) : super(name, age);@overridevoid introduce() {super.introduce(); // 调用父类方法print('我的专业是$major。');}
    }
  • ArkTS: 同样使用 extends 和 super

    typescript

    // ArkTS
    class Student extends Person {major: string;constructor(name: string, age: number, major: string) {super(name, age); // 必须首先调用 superthis.major = major;}override introduce(): void {super.introduce(); // 调用父类方法console.log(`我的专业是${this.major}。`);}
    }

3. 访问控制符 (封装)

  • Dart: 没有 publicprivateprotected 关键字。默认都是公共的。以一个下划线 _ 开头的标识符是库私有的。

    dart

    // Dart
    class BankAccount {String _privateData; // 库内可见String publicData; // 到处可见void _privateMethod() {} // 库内可见
    }
  • ArkTS: 提供了标准的访问控制符,与 Java/C# 类似。

    • public (默认): 公有。

    • private: 私有,以 # 开头  使用 private 关键字(具体取决于TS配置,HarmonyOS推荐使用 private)。

    • protected: 受保护,子类和自身可访问。

    typescript

    // ArkTS
    class BankAccount {private balance: number = 0; // 私有属性public owner: string; // 公有属性public deposit(amount: number): void {this.balance += amount; // 类内部可以访问私有属性}public getBalance(): number {return this.balance;}
    }

4. 计算属性

  • Dart: 使用 get 关键字定义计算属性。

    dart

    // Dart
    class Rectangle {double width, height;Rectangle(this.width, this.height);// 计算属性 areadouble get area => width * height;set area(double value) { // 也可以有 setterwidth = value / height;}
    }
  • ArkTS: 使用 get 关键字,语法略有不同。

    typescript

    // ArkTS
    class Rectangle {width: number;height: number;constructor(width: number, height: number) {this.width = width;this.height = height;}// 计算属性 areaget area(): number {return this.width * this.height;}
    }

三、 总结与核心差异表
特性DartArkTS核心差异
函数类型可选,动态类型强制,静态类型ArkTS 的类型系统更严格,旨在减少运行时错误。
可选参数命名参数 {},位置参数 []使用 ? 和默认值语法风格不同,Dart 的命名参数在调用时更清晰。
异步返回Future<T>Promise<T>概念完全相同,只是类型名称不同。
构造函数与类同名,this. 语法糖constructor 关键字Dart 的语法更简洁。
访问控制下划线 _ 前缀表示库私有publicprivateprotected 关键字ArkTS 提供了更传统和精细的访问控制。
空安全默认开启,非空类型需初始化继承 TypeScript 的严格空检查两者都致力于在编译时消除空引用错误。
设计哲学为 Flutter 的 UI-as-Code 优化,灵活为大型应用和系统级开发优化,严谨Dart 偏向灵活性开发效率,ArkTS 偏向工程化运行时安全

学习建议:

  • 从 Dart 到 ArkTS: 你需要重点适应强制的类型注解、传统的访问控制符以及 constructor 关键字。忘掉 Dart 的 _ 私有方式。

  • 从 ArkTS 到 Dart: 你会感受到更自由的语法(类型可选),并学习 Dart 特有的命名构造函数和 _ 私有规则。注意 Future 和 Promise 的转换。

希望这篇对比能帮助你在 Dart 和 ArkTS 的世界里自如切换,更好地驾驭 Flutter 和 HarmonyOS 应用开发!

https://developer.huawei.com/consumer/cn/training/classDetail/fd34ff9286174e848d34cde7f512ce22?type=1%3Fha_source%3Dhmosclass&ha_sourceId=89000248

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/965959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年口碑好的氮气减压器厂家推荐及采购参考

2025年口碑好的氮气减压器厂家推荐及采购参考行业背景与市场趋势氮气减压器作为工业气体控制系统的核心部件,广泛应用于化工、医疗、食品加工、电子制造等领域。根据《2024-2029年中国减压器行业市场调研与投资前景预…

2025年口碑好的小羊皮艺术涂料用户口碑最好的厂家榜

2025年口碑好的小羊皮艺术涂料用户口碑最好的厂家榜行业背景与市场趋势近年来,随着消费者对家居环境品质要求的不断提升,艺术涂料市场迎来了爆发式增长。据中国涂料工业协会最新数据显示,2024年中国艺术涂料市场规模…

2025年评价高的肌理漆艺术涂料厂家推荐及采购指南

2025年评价高的肌理漆艺术涂料厂家推荐及采购指南行业背景与市场趋势肌理漆艺术涂料作为建筑装饰材料的重要组成部分,近年来随着消费者对个性化、艺术化家居环境需求的提升,市场规模持续扩大。据《2024-2025年中国建…

2025年口碑好的减压器厂家选购指南与推荐

2025年口碑好的减压器厂家选购指南与推荐行业背景与市场趋势减压器作为工业生产和实验室应用中不可或缺的关键设备,其市场需求随着制造业的持续发展而稳步增长。根据中国工业气体协会最新发布的《2024-2025年中国减压…

2025年靠谱的动力配电柜行业内知名厂家排行榜

2025年靠谱的动力配电柜行业内知名厂家排行榜行业背景与市场趋势随着我国电力基础设施建设的持续升级和新能源产业的快速发展,动力配电柜作为电力系统中的关键设备,市场需求呈现稳定增长态势。根据中国电器工业协会最…

2025年靠谱的氧气表乙炔表最新TOP品牌厂家排行

2025年靠谱的氧气表乙炔表最新TOP品牌厂家排行行业背景与市场趋势随着工业制造、建筑安装、金属加工等行业的快速发展,氧气表和乙炔表作为焊接切割作业中不可或缺的安全设备,市场需求持续增长。据中国焊接协会2024年…

2025年热门的低压配电柜厂家推荐及采购指南

2025年热门的低压配电柜厂家推荐及采购指南行业背景与市场趋势随着全球能源转型加速和电力基础设施升级需求增长,低压配电柜市场正迎来新一轮发展机遇。根据市场研究机构MarketsandMarkets最新报告显示,2023年全球低…

2025年靠谱的氩弧焊气表厂家最新推荐排行榜

2025年靠谱的氩弧焊气表厂家最新推荐排行榜行业背景与市场趋势氩弧焊作为一种高精度焊接工艺,在航空航天、汽车制造、精密仪器等领域应用广泛。根据中国焊接行业协会2024年发布的《中国焊接设备市场白皮书》显示,202…

2025年比较好的高压活塞式空气压缩机行业内知名厂家排行榜

2025年高压活塞式空气压缩机行业内知名厂家排行榜行业背景与市场趋势高压活塞式空气压缩机作为工业领域的核心动力设备,近年来随着制造业升级和环保要求提高,市场需求持续增长。根据《2024-2029年中国空气压缩机行业…

2025年评价高的新能源变电站用户口碑最好的厂家榜

2025年评价高的新能源变电站用户口碑最好的厂家榜新能源变电站行业背景与市场趋势随着全球能源结构转型加速推进,新能源变电站作为电力系统关键节点设备,正迎来前所未有的发展机遇。根据国际能源署(IEA)最新报告显…

2025年口碑好的变电站热门厂家推荐榜单

2025年口碑好的变电站热门厂家推荐榜单行业背景与市场趋势随着中国"十四五"规划深入推进和"双碳"目标加速实施,电力行业正经历着前所未有的变革。据中国电力企业联合会最新数据显示,2024年我国变…

2025年口碑好的BOO模式智慧空压站厂家推荐及采购参考

2025年口碑好的BOO模式智慧空压站厂家推荐及采购参考行业背景与市场趋势随着工业4.0和智能制造概念的深入发展,智慧空压站作为工业基础设施的重要组成部分,正经历着从传统模式向智能化、数字化方向的转型。根据《202…

2025年知名的共享智慧空压站厂家最新TOP排行榜

2025年知名的共享智慧空压站厂家最新TOP排行榜行业背景与市场趋势随着工业4.0和智能制造技术的快速发展,共享智慧空压站作为工业基础设施的重要组成部分,正在经历前所未有的技术革新和市场扩张。根据《2024-2029年中…

2025年靠谱的无油空气压缩机行业内口碑厂家排行榜

2025年靠谱的无油空气压缩机行业内口碑厂家排行榜行业背景与市场趋势无油空气压缩机作为工业领域的关键设备,近年来随着环保要求的提高和制造业转型升级的需求,市场规模持续扩大。根据《2024-2029年中国空气压缩机行…

开车旅行-st表

noip_2012_Day1_T3P1081 开车旅行-st表 题意 题目好长,有 \(A\) 走改点向后的次短边, \(B\) 向后走最短边,路径长度定义为两个城市的高度差,如果到两个城市距离相同,高度低的城市先为短边。第一问:从哪开始能在总…

2025年比较好的保温饭盒厂家推荐及选择指南

2025年比较好的保温饭盒厂家推荐及选择指南行业背景与市场趋势随着现代生活节奏加快和健康饮食意识提升,保温饭盒市场近年来呈现稳定增长态势。据中国家居用品协会2024年数据显示,中国保温饭盒市场规模已达85亿元人民…

2025年知名的高质量保温杯TOP品牌厂家排行榜

2025年知名的高质量保温杯TOP品牌厂家排行榜行业背景与市场趋势随着健康生活理念的普及和消费升级趋势的持续深化,保温杯市场近年来呈现出稳健增长态势。根据中国日用杂品工业协会最新发布的《2024-2025年中国保温容器…

2025年比较好的定做保温饭盒厂家最新用户好评榜

2025年比较好的定做保温饭盒厂家最新用户好评榜行业背景与市场趋势随着现代人生活节奏加快和健康饮食意识提升,保温饭盒市场近年来呈现持续增长态势。据中国家居用品协会2024年发布的《中国保温容器行业发展报告》显示…

dotnet 10 已知问题 构建 WPF 时提示 System.Private.Windows.GdiPlus 程序集未找到错误

本文记录 dotnet 10 的已知问题,将会导致 WPF 项目构建的时候给出错误此问题开始是在 https://github.com/dotnet/wpf/issues/11246 被报告的 此问题已修复,详细请看 https://github.com/dotnet/dotnet/pull/3120 本…

2025年比较好的大容量保温杯热门厂家推荐榜单

2025年比较好的大容量保温杯热门厂家推荐榜单行业背景与市场趋势随着健康饮水理念的普及和户外生活方式的兴起,大容量保温杯市场近年来呈现持续增长态势。据中国日用杂品工业协会最新数据显示,2024年中国保温杯市场规…