鸿蒙开发1:如何快速掌握 ArkTS
🎯 目标:让有的同学能在短时间内理解从“过程式编程”过渡到“面向组件 + 声明式 UI + 强类型脚本”的编程模型。✅。
·
一、学习目标
🎯 目标:
让有 C语言基础 的同学能在短时间内理解 ArkTS 的语法结构与思维方式,
从“过程式编程”过渡到“面向组件 + 声明式 UI + 强类型脚本”的编程模型。
二、总体对比概览
| 特性 | C语言 | ArkTS(方舟TS) |
|---|---|---|
| 类型系统 | 静态类型,基本类型固定 | 强类型 + 类型推导 + 联合类型 |
| 编程范式 | 过程式 | 面向对象 + 声明式 UI |
| 运行环境 | 编译成机器码 | 运行在方舟运行时(Ark Runtime) |
| 内存管理 | 手动(malloc/free) | 自动垃圾回收(GC) |
| 语法风格 | 类似C/C++ | 基于 TypeScript(ECMAScript 超集) |
| 入口点 | main() 函数 | @Entry 组件 + 生命周期函数 |
| 文件组织 | 函数+头文件 | 模块化导入 (import/export) |
| UI绘制 | 控制台/图形库调用 | 声明式 UI 构建 (@Component + build()) |
三、语法相同点(C → ArkTS)
这些相似处让C语言学生能“快速上手”:
| 类别 | C语言示例 | ArkTS示例 | 说明 |
|---|---|---|---|
| 基本类型 | int, float, char | number, boolean, string | 基本数据类型含义相近 |
| 运算符 | `+ - * / % ++ -- == != && | ` | |
| 控制语句 | if, else, for, while, do...while, switch | 同上 | 控制结构几乎完全一致 |
| 函数定义 | int add(int a,int b){return a+b;} | function add(a:number,b:number):number {return a+b;} | 函数定义结构相似 |
| 注释语法 | // 单行、/* 多行 */ | 同样支持 | |
| 数组语法 | int arr[3] = {1,2,3}; | let arr:number[] = [1,2,3]; | 概念相同,语法略不同 |
| 作用域 | { } 控制代码块范围 | 相同 { } 块作用域 |
✅ 小结:
ArkTS 的控制结构与表达式计算几乎与C语言一致,
所以控制流程、逻辑判断、循环语法都能直接迁移。
四、主要不同点与新特性
1️⃣ 数据类型系统更灵活
| 特性 | C语言 | ArkTS |
|---|---|---|
| 基本类型 | int, float, char | number, string, boolean, any |
| 联合类型 | 不支持 | `let x: number |
| 自动推导 | 不支持 | let x = 5; // 自动推断为number |
| 空值安全 | 没有 | string? 表示可空类型 |
| 对象类型 | 用结构体 | 用 class/interface |
示例:
let name: string = "Jerry";
let age: number = 20;
let id: number | string = "A101"; // 联合类型
let score?: number; // 可选属性
2️⃣ 变量与常量声明方式不同
| C语言 | ArkTS | 说明 |
|---|---|---|
| int a = 3; | let a: number = 3; | let 具有块级作用域 |
| const PI = 3.14; | const PI: number = 3.14; | 常量不可修改 |
| - | var(不推荐) | 旧JS写法,作用域不安全 |
小结:
使用let、const替代 C 的局部变量声明,作用域更安全。
3️⃣ 函数与返回类型标注
// C语言
int add(int a, int b) {
return a + b;
}
// ArkTS
function add(a: number, b: number): number {
return a + b;
}
✅ 相似点:结构几乎一样。
🔸 不同点:ArkTS 在参数和返回值后都要标明类型。
4️⃣ 没有指针,引用与对象取代
C语言大量使用指针:
int *p = &a;
*p = 10;
ArkTS 没有指针概念,使用对象和引用传递:
let obj = {value: 10};
let ref = obj;
ref.value = 20; // obj.value 也变为 20
✅ 思维转变:从“地址操作” → “引用操作”
5️⃣ 模块化与导入机制
C语言:
#include <stdio.h>
#include "math.h"
ArkTS:
import { sum } from './math';
export function avg(a:number,b:number){ return sum(a,b)/2; }
✅ 模块系统更灵活,支持导入导出函数、类、组件。
6️⃣ 类与组件机制(ArkTS核心)
ArkTS 支持 面向对象 与 声明式UI。
类(class)示例:
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
sayHello() {
console.log("Hello, " + this.name);
}
}
组件(ArkTS特有):
@Entry
@Component
struct HelloWorld {
@State message: string = "Hello ArkTS";
build() {
Text(this.message)
.fontSize(30)
.fontColor(Color.Blue)
}
}
📘 组件是 ArkTS 的“程序入口”,代替了 C 的 main()。
7️⃣ 内存管理:GC替代手动释放
| C语言 | ArkTS |
|---|---|
| malloc() / free() | 自动垃圾回收(GC) |
| 手动管理 | 系统自动释放无引用对象 |
| 容易内存泄漏 | 几乎无手动管理 |
✅ 你不再需要担心“忘记 free()”的问题。
8️⃣ I/O方式不同
| 功能 | C语言 | ArkTS |
|---|---|---|
| 控制台输出 | printf("Hello"); | console.log("Hello"); |
| 控制台输入 | scanf() | 无直接输入,使用 UI 交互或接口 |
| 文件操作 | fopen, fwrite | 使用系统API或JS模块 |
五、示例对比:从C到ArkTS
✅ C版本
#include <stdio.h>
int main() {
int a = 3, b = 5;
int sum = a + b;
printf("Sum = %d\n", sum);
return 0;
}
✅ ArkTS版本
@Entry
@Component
struct SumExample {
@State a: number = 3;
@State b: number = 5;
build() {
Column() {
Text(`Sum = ${this.a + this.b}`)
.fontSize(24)
}
}
}
对比理解:
- C:过程式执行 → 输出到控制台
- ArkTS:声明式构建 → 输出到UI界面
六、学习迁移建议
| 阶段 | 内容 | 建议 |
|---|---|---|
| 第一步 | 掌握基本语法 | 从变量、控制语句、函数入手,对照C语法 |
| 第二步 | 理解模块化与class | 学习 import/export 与面向对象写法 |
| 第三步 | 掌握声明式UI | 练习 @Component、@State、build() |
| 第四步 | 事件与数据绑定 | 理解响应式编程模型 |
| 第五步 | 项目实践 | 从简单页面(计数器、表单)入手 |
七、总结对照表
| 对比项 | C语言 | ArkTS |
|---|---|---|
| 语法风格 | 程序式 | 声明式 + 面向对象 |
| 内存管理 | 手动 | 自动GC |
| UI结构 | 函数式绘制 | 组件化声明 |
| 编译方式 | 编译成机器码 | Ark Compiler 编译为字节码 |
| 类型系统 | 静态简单类型 | 强类型 + 类型推导 |
| 程序入口 | main() | @Entry @Component |
| 扩展生态 | C标准库 | ArkUI + ArkTS标准库 |
更多推荐


所有评论(0)