一、学习目标

🎯 目标:
让有 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写法,作用域不安全

小结:

使用  letconst 替代 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标准库

Logo

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

更多推荐