第三章 ArkTS语言基础(上):掌握ArkTS的基本语法

好,咱们直接进入正题。ArkTS是鸿蒙应用开发的核心语言,说白了就是TypeScript的超集,加了一些鸿蒙自己的东西。我刚开始接触时也觉得“不就是TS吗”,但真正写起来才发现,装饰器那块儿坑不少。今天咱们先把基础语法啃下来。

3.1 变量声明:let、const和var的区别

在ArkTS里,变量声明有三种方式:letconstvar。我个人习惯只用前两个,var基本不用。为什么?因为var有变量提升的问题,容易写出bug。

核心区别:

  • let:块级作用域,可以重新赋值
  • const:块级作用域,声明后不能重新赋值
  • var:函数级作用域,有变量提升
// 我推荐这样写
let count: number = 0;
const appName: string = 'MyApp';

// 这样写容易出问题
var oldWay = '别用我';

我的经验:在项目中,能用const就用const。这样代码更安全,别人一看就知道这个值不会变。我遇到过好几次因为用let导致不小心被重新赋值的bug,后来就养成了“先const,不行再let”的习惯。

3.2 数据类型:基础类型与联合类型

ArkTS的数据类型跟TypeScript基本一致,但有些细节要注意。嗯,这里我重点说几个常用的。

3.2.1 基础类型

类型 说明 示例
number 数字,包括整数和浮点数 let age: number = 25;
string 字符串 let name: string = '鸿蒙';
boolean 布尔值 let isReady: boolean = true;
null / undefined 空值 let data: null = null;

3.2.2 联合类型

这个在实际开发中特别常用。比如一个变量可能返回字符串,也可能返回null,你就可以用联合类型。

// 联合类型:变量可以是string或null
let result: string | null = null;

// 我经常在API调用时这么用
function fetchData(): string | undefined {
  // 如果请求失败,返回undefined
  return undefined;
}

避坑指南:我曾经在项目里忘了处理联合类型的null情况,结果运行时直接报错。记住:用联合类型时,一定要做类型收窄(type narrowing),比如用if (result !== null)判断一下。

3.3 函数定义:普通函数、箭头函数与可选参数

函数是ArkTS的核心。我个人觉得,箭头函数写起来更简洁,但普通函数在需要动态绑定this时更合适。

3.3.1 普通函数

// 带类型注解的函数
function add(a: number, b: number): number {
  return a + b;
}

// 可选参数用?表示
function greet(name: string, greeting?: string): string {
  if (greeting) {
    return `${greeting}, ${name}`;
  }
  return `Hello, ${name}`;
}

3.3.2 箭头函数

// 箭头函数,我写UI回调时最爱用
const multiply = (a: number, b: number): number => a * b;

// 在数组操作中特别方便
const numbers: number[] = [1, 2, 3];
const doubled = numbers.map(n => n * 2);

我的习惯:在组件的事件处理中,我几乎只用箭头函数。因为箭头函数不绑定自己的this,能避免很多作用域问题。你想想看,如果用了普通函数,this指向变了,调试起来多头疼。

3.4 装饰器入门:@Component、@State和@Entry

装饰器是ArkTS最特别的地方。说白了,它就是给类或属性加个“标签”,让框架知道怎么处理。我刚开始学的时候觉得这玩意儿很玄乎,其实理解后就很简单。

3.4.1 @Component:标记一个类为组件

@Component
struct MyComponent {
  build() {
    // 组件的UI描述
  }
}

这个装饰器告诉鸿蒙:“嘿,这个类是一个UI组件”。没有它,你的类就只是个普通类。

3.4.2 @State:让数据驱动UI

@Component
struct Counter {
  @State count: number = 0;

  build() {
    Button('点击增加')
      .onClick(() => {
        this.count++;
      })
  }
}

@State装饰的变量一旦变化,UI会自动刷新。我在项目中遇到过一个问题:忘了加@State,结果数据变了,界面纹丝不动。嗯,这个坑我踩过。

3.4.3 @Entry:入口组件

@Entry
@Component
struct App {
  build() {
    // 应用的入口
  }
}

@Entry标记这个组件是页面的入口。一个页面只能有一个@Entry,多了会报错。

装饰器总结:

  • @Component:声明这是一个组件
  • @State:声明响应式数据
  • @Entry:声明页面入口

3.5 知识体系总览

为了让你更直观地理解本章内容,我画了一张图。这张图展示了ArkTS基础语法的核心结构。

ArkTS基础语法体系 变量声明 • let:块级作用域,可重新赋值 • const:块级作用域,不可重新赋值 • var:函数级作用域,有变量提升 ⚠ 推荐:优先用const 数据类型 • 基础:number, string, boolean • 特殊:null, undefined • 联合:string | null 💡 记得做类型收窄 函数定义 • 普通函数:function add(a: number) • 箭头函数:const add = (a) => a • 可选参数:function greet(name?) 💡 UI回调用箭头函数 装饰器入门 • @Component:标记为组件 • @State:声明响应式数据 • @Entry:标记页面入口 ⚠ 一个页面只能有一个@Entry

这张图把本章的四个核心知识点串起来了。你写代码时,可以对照着看:变量声明用对了吗?数据类型写全了吗?函数用箭头还是普通?装饰器加了吗?

最后说一句:ArkTS的基础语法其实不难,难的是养成好习惯。我刚开始写时也经常忘了加@State,或者把constlet混用。多写几次就熟了。记住:代码是写给人看的,顺便给机器运行。

专注资料整理