第4章 ArkTS语言基础(上):ArkTS简介、变量与数据类型、函数定义、条件与循环语句
好,咱们正式开始接触ArkTS了。说实话,很多初学者一看到新语言就头大,觉得又要重新学一遍。其实ArkTS没那么可怕,它是在TypeScript基础上做了鸿蒙化的定制。说白了,你只要会点JavaScript基础,上手ArkTS就是分分钟的事。
我个人习惯把ArkTS看作是「带镣铐跳舞」——它保留了TypeScript的类型安全,又加上了ArkUI的声明式UI能力。嗯,咱们这一章先把语言基础打牢,后面写UI才不会手忙脚乱。
4.1 ArkTS是什么?
ArkTS是鸿蒙应用开发的主力语言。它基于TypeScript,但做了两件重要的事:
- 强化了静态类型:所有变量类型在编译期就确定,运行时不会突然变脸
- 融合了ArkUI框架:用声明式语法描述UI,跟写HTML似的
我记得刚接触ArkTS时,最让我舒服的就是它的类型系统。以前写JavaScript,经常遇到「这变量怎么变成字符串了」的坑。在ArkTS里,类型一旦定下来,编译器就会帮你盯着,想改都改不了。
eval,不能随意改变对象结构。这是为了性能考虑,习惯就好。
4.2 变量与数据类型
咱们先看变量声明。ArkTS里声明变量用let和const,这点跟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} |
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 }
}
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代码的基本能力。
- ArkTS是静态类型语言,所有变量类型在编译期确定
- 能用
const就别用let,减少变量被意外修改的可能 - 函数一定要写类型注解,这是ArkTS的「安全网」
- 循环优先用
for...of,简洁且安全
好了,这一章的内容就到这里。代码不多,但都是基本功。你最好打开DevEco Studio,把上面的示例都敲一遍。光看是学不会的,动手才是王道。