第三章 ArkTS语言基础(上):掌握ArkTS的基本语法
好,咱们直接进入正题。ArkTS是鸿蒙应用开发的核心语言,说白了就是TypeScript的超集,加了一些鸿蒙自己的东西。我刚开始接触时也觉得“不就是TS吗”,但真正写起来才发现,装饰器那块儿坑不少。今天咱们先把基础语法啃下来。
3.1 变量声明:let、const和var的区别
在ArkTS里,变量声明有三种方式:let、const和var。我个人习惯只用前两个,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的基础语法其实不难,难的是养成好习惯。我刚开始写时也经常忘了加@State,或者把const和let混用。多写几次就熟了。记住:代码是写给人看的,顺便给机器运行。