第4章 ArkTS语言基础(上):ArkTS简介、变量与数据类型、函数定义、条件与循环语句

好,咱们正式开始接触ArkTS了。说实话,很多初学者一看到新语言就头大,觉得又要重新学一遍。其实ArkTS没那么可怕,它是在TypeScript基础上做了鸿蒙化的定制。说白了,你只要会点JavaScript基础,上手ArkTS就是分分钟的事。

我个人习惯把ArkTS看作是「带镣铐跳舞」——它保留了TypeScript的类型安全,又加上了ArkUI的声明式UI能力。嗯,咱们这一章先把语言基础打牢,后面写UI才不会手忙脚乱。

4.1 ArkTS是什么?

ArkTS是鸿蒙应用开发的主力语言。它基于TypeScript,但做了两件重要的事:

  • 强化了静态类型:所有变量类型在编译期就确定,运行时不会突然变脸
  • 融合了ArkUI框架:用声明式语法描述UI,跟写HTML似的

我记得刚接触ArkTS时,最让我舒服的就是它的类型系统。以前写JavaScript,经常遇到「这变量怎么变成字符串了」的坑。在ArkTS里,类型一旦定下来,编译器就会帮你盯着,想改都改不了。

小提示:如果你有TypeScript经验,ArkTS基本就是「开箱即用」。唯一要注意的是,ArkTS对某些JS动态特性做了限制,比如不能用eval,不能随意改变对象结构。这是为了性能考虑,习惯就好。

4.2 变量与数据类型

咱们先看变量声明。ArkTS里声明变量用letconst,这点跟ES6一样。我建议你养成一个好习惯:能确定不变的值,一律用const。为什么?因为代码可读性会好很多,别人一看就知道这个值不会变。

// 常量:值不会改变
const appName: string = '我的鸿蒙应用'

// 变量:值可能会变
let count: number = 0
let isReady: boolean = false

ArkTS的数据类型,我整理了一张表,你一看就明白:

类型 说明 示例
number 数字,整数小数都行 let age: number = 25
string 字符串,用单引号或双引号 let name: string = '张三'
boolean 布尔值,true或false let flag: boolean = true
undefined 未定义,变量声明了但没赋值 let x: number | undefined
null 空值,主动设置为空 let y: string | null = null
Array 数组,元素类型固定 let list: number[] = [1, 2, 3]
object 对象,键值对集合 let obj: Record<string, number> = {a: 1}
注意:ArkTS不支持any类型。我曾经在项目里试图用any偷懒,结果被编译器无情拒绝。后来想想也对,any等于放弃了类型检查,那用ArkTS的意义就少了一半。

类型推断是ArkTS的一个贴心设计。你写代码时,如果类型很明显,可以省略类型注解:

let message = 'Hello'  // 自动推断为 string
let score = 95         // 自动推断为 number

但遇到复杂情况,我建议你还是显式写上类型。这样代码自文档化,别人一看就懂。

4.3 函数定义

函数是代码的积木块。ArkTS里定义函数有两种方式:函数声明和箭头函数。我个人更偏爱箭头函数,因为它简洁,而且不会搞乱this的指向。

// 函数声明
function add(a: number, b: number): number {
  return a + b
}

// 箭头函数
const multiply = (a: number, b: number): number => {
  return a * b
}

你可能会问:「参数类型和返回值类型都要写吗?」嗯,最好都写。我在项目中遇到过这样的场景:一个函数本来返回数字,后来改成了返回字符串,但调用方没更新,结果运行时出了诡异的bug。有了类型注解,编译器在编译期就能发现这种问题。

函数还可以有可选参数和默认参数:

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

// 默认参数
function createUser(name: string, age: number = 18): object {
  return { name, age }
}
技巧:可选参数一定要放在必选参数后面。这是TypeScript的规则,ArkTS也继承了。如果你把可选参数放前面,编译器会报错。

4.4 条件与循环语句

条件语句和循环语句,是控制程序流程的基本工具。ArkTS在这方面跟JavaScript几乎一样,但有一些小细节要注意。

4.4.1 条件语句

if-else是最常用的条件判断。我建议你保持代码的扁平化,不要嵌套太深。如果条件超过三层,考虑用switch或者提取成函数。

const score: number = 85

if (score >= 90) {
  console.log('优秀')
} else if (score >= 60) {
  console.log('及格')
} else {
  console.log('不及格')
}

还有一种更简洁的写法——三元运算符。适合简单的二选一场景:

const status: string = score >= 60 ? '通过' : '未通过'
避坑指南:我曾经在项目里写过「三元运算符嵌套三元运算符」的代码,结果自己三天后回来看都懵了。三元运算符最多嵌套一层,再多就老老实实用if-else

4.4.2 循环语句

ArkTS支持for循环和while循环。我个人最常用的是for...of,因为它直接遍历元素,不用操心索引。

const fruits: string[] = ['苹果', '香蕉', '橘子']

// for...of 遍历元素
for (const fruit of fruits) {
  console.log(fruit)
}

// 传统 for 循环,需要索引时用
for (let i = 0; i < fruits.length; i++) {
  console.log(`${i}: ${fruits[i]}`)
}

// while 循环,条件满足时执行
let count = 0
while (count < 5) {
  console.log(`第${count + 1}次`)
  count++
}

你想想看,for...of是不是比传统for循环清爽多了?而且它不会出现「索引越界」这种低级错误。

这里有个知识点:ArkTS不支持for...in。为什么?因为for...in会遍历原型链上的属性,容易引发意想不到的问题。鸿蒙团队干脆把它禁了,省得大家踩坑。

4.5 本章知识体系

为了让你更直观地理解本章的知识结构,我画了一张图:

ArkTS语言基础(上) ArkTS简介 基于TypeScript 融合ArkUI框架 静态类型系统 变量与数据类型 let / const 声明 number/string/boolean 数组/对象/类型推断 函数定义 函数声明 / 箭头函数 参数与返回值类型 可选/默认参数 条件与循环语句 if-else / switch for...of / while 三元运算符

这张图把本章的四个核心知识点串起来了。你看,从ArkTS简介出发,到变量类型、函数定义,再到流程控制,每一步都是环环相扣的。掌握了这些,你就有了写ArkTS代码的基本能力。

核心要点:
  • ArkTS是静态类型语言,所有变量类型在编译期确定
  • 能用const就别用let,减少变量被意外修改的可能
  • 函数一定要写类型注解,这是ArkTS的「安全网」
  • 循环优先用for...of,简洁且安全

好了,这一章的内容就到这里。代码不多,但都是基本功。你最好打开DevEco Studio,把上面的示例都敲一遍。光看是学不会的,动手才是王道。


专注资料整理