3. ArkTS语言基础(上):变量声明、数据类型、函数定义、条件与循环语句

好,咱们正式开始写代码了。

ArkTS 是鸿蒙应用开发的核心语言。说白了,它是在 TypeScript 基础上做了些定制,更贴近咱们移动端开发的习惯。我刚开始接触的时候,觉得它跟 TypeScript 很像,但用着用着就发现了一些小门道。

这一章,咱们把最基础的东西捋一遍。变量怎么声明、数据有哪些类型、函数怎么写、条件判断和循环怎么用。这些都是写代码的“砖瓦”,不搞扎实了,后面盖楼会歪。

ArkTS 语言基础(上)知识体系 ArkTS 基础 变量声明 数据类型 函数定义 条件与循环 let / const / var string / number / boolean 普通函数 / 箭头函数 if / else / for / while 类型推断 联合类型 / 数组 可选参数 / 默认值 break / continue

3.1 变量声明:let、const 和 var

在 ArkTS 里声明变量,有三种方式。但我个人习惯,几乎只用 letconst

核心原则:能用 const 就别用 let,能用 let 就别用 var。

const 声明的是常量,一旦赋值就不能改了。比如你定义一个应用的名字,肯定不会变,那就用 const。

const appName: string = '我的记账本';
// appName = '新名字'; // 这行会报错,因为 const 不能重新赋值

let 声明的是变量,可以随时改。比如用户的输入,肯定要用 let。

let userAge: number = 18;
userAge = 19; // 没问题

至于 var,嗯……我建议你直接忘掉它。我在项目中遇到过几次因为 var 的作用域问题导致的 bug,排查起来特别头疼。var 是函数作用域,而 let 和 const 是块级作用域。说白了,用 var 容易出幺蛾子。

小技巧:写代码的时候,先想想这个值以后会不会变。不会变?用 const。会变?用 let。就这么简单。

3.2 数据类型:从基础到进阶

ArkTS 的数据类型,跟 TypeScript 基本一致。咱们挑几个常用的说说。

3.2.1 基础类型

类型 说明 示例
string 字符串 '你好'"你好"
number 数字(整数和浮点数都行) 423.14
boolean 布尔值 truefalse
undefined 未定义 let a: undefined;
null 空值 let b: null = null;

你可能会问,为什么要有 undefinednull 两个?说实话,这算是 JavaScript 历史遗留问题。在 ArkTS 里,我建议你尽量用 undefined,少用 null。我曾经因为 null 和 undefined 混用,在数据判空时踩过坑,排查了半天才发现是类型判断的问题。

3.2.2 联合类型

有时候一个变量可能是多种类型,这时候就用联合类型。比如一个接口返回的数据,可能是字符串也可能是数字。

let result: string | number;
result = '成功';
result = 200; // 也可以

注意:使用联合类型时,如果要调用某个类型特有的方法,得先做类型收窄。比如 typeof 判断一下,不然 ArkTS 编译器会报错。

3.2.3 数组和元组

数组有两种写法,我个人更喜欢第二种,更清晰。

let arr1: number[] = [1, 2, 3];
let arr2: Array<string> = ['a', 'b', 'c'];

元组是固定长度、固定类型的数组。比如你要表示一个坐标点 (x, y),用元组就很合适。

let point: [number, number] = [10, 20];

3.3 函数定义:多种姿势任你选

函数是代码的“积木块”。ArkTS 里定义函数的方式挺灵活,我挑最常用的两种说说。

3.3.1 普通函数

最传统的写法,跟 JavaScript 一样。

function greet(name: string): string {
  return '你好,' + name;
}

这里 : string 是返回值类型。我建议每个函数都写上返回值类型,哪怕返回 void 也写清楚。为什么?因为这样别人看你的代码,一眼就知道这个函数会返回什么,不用去猜。

3.3.2 箭头函数

箭头函数写起来更简洁,而且它不绑定自己的 this。在 ArkTS 里,我特别喜欢用箭头函数做回调。

const add = (a: number, b: number): number => {
  return a + b;
};

// 更简洁的写法:单行可以省略花括号和 return
const multiply = (a: number, b: number): number => a * b;

我的习惯:如果函数体只有一行,就用箭头函数的简写形式。如果有多行,就用普通函数或者带花括号的箭头函数。怎么清晰怎么来。

3.3.3 可选参数和默认值

有时候函数的参数不是必须的。比如一个打招呼的函数,可以指定称呼,也可以不指定。

function sayHello(name: string, title?: string): string {
  if (title) {
    return '您好,' + title + name;
  }
  return '您好,' + name;
}

参数后面加个 ?,就表示这个参数是可选的。也可以给参数一个默认值,这样调用方不传参时就用默认值。

function createUser(name: string, age: number = 18): void {
  console.log(`创建用户:${name},年龄:${age}`);
}

3.4 条件语句:让代码有“判断力”

程序不是死板的,它得根据不同的情况做不同的事。条件语句就是干这个的。

3.4.1 if / else if / else

这是最常用的条件判断。比如判断用户等级:

let score: number = 85;
let level: string;

if (score >= 90) {
  level = '优秀';
} else if (score >= 60) {
  level = '及格';
} else {
  level = '不及格';
}

这里有个小细节:条件判断的顺序很重要。如果你把 score >= 60 写在前面,那 90 分的人也会被归到“及格”里。我刚开始写代码时就犯过这种错,后来养成了习惯:先写最严格的条件,再逐步放宽。

3.4.2 switch / case

当判断的条件是固定的几个值时,用 switch 更清晰。比如根据星期几做不同的事:

let day: number = 3;
switch (day) {
  case 1:
    console.log('周一,开始工作');
    break;
  case 2:
  case 3:
  case 4:
  case 5:
    console.log('工作日,加油');
    break;
  case 6:
  case 7:
    console.log('周末,休息');
    break;
  default:
    console.log('无效的日期');
}

别忘了 break! 我曾经在项目中漏写了一个 break,结果代码执行了不该执行的分支,查了半天才发现。每个 case 后面都要加 break,除非你有意让代码“穿透”到下一个 case。

3.5 循环语句:重复的事情交给机器

计算机最擅长的就是重复做一件事。循环语句就是让计算机“听话地重复”。

3.5.1 for 循环

最经典的循环。比如遍历一个数组:

let fruits: string[] = ['苹果', '香蕉', '橘子'];
for (let i: number = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}

在 ArkTS 里,我更推荐用 for...of,写法更简洁,也不容易出错。

for (let fruit of fruits) {
  console.log(fruit);
}

3.5.2 while 循环

当你不确定要循环多少次时,用 while。比如等待用户输入直到正确:

let input: string = '';
while (input !== 'exit') {
  // 假设这里在等待用户输入
  input = getUserInput();
}

死循环警告:写 while 循环一定要确保条件最终会变成 false,不然程序就卡死了。我见过一个同事的代码,while 条件里忘了更新变量,结果服务器 CPU 直接飙到 100%。

3.5.3 break 和 continue

这两个关键字是循环里的“控制杆”。

  • break:立即跳出整个循环。
  • continue:跳过本次循环,进入下一次。
for (let i: number = 1; i <= 10; i++) {
  if (i === 5) {
    continue; // 跳过 5
  }
  if (i === 8) {
    break; // 到 8 就停止
  }
  console.log(i); // 输出:1, 2, 3, 4, 6, 7
}

嗯,到这里,ArkTS 语言基础的上半部分就讲完了。变量声明、数据类型、函数定义、条件与循环,这些是写任何程序都绕不开的东西。别觉得简单就跳过,我建议你打开 DevEco Studio,把每个例子都敲一遍。代码这东西,看十遍不如写一遍。


专注资料整理