3. ArkTS语言基础(上):认识ArkTS语言,掌握基本数据类型
各位同学,咱们今天聊聊ArkTS。说实话,我第一次接触ArkTS的时候,心里也在嘀咕:这不就是TypeScript换了个马甲吗?但真正用起来才发现,鸿蒙团队在背后做了不少优化。咱们今天先把最基础的东西吃透,后面写代码才能顺手。
3.1 ArkTS到底是什么?
ArkTS是鸿蒙应用开发的首选语言。它基于TypeScript,但做了精简和增强。我个人的理解是:它保留了TypeScript的类型安全,又去掉了那些容易让人踩坑的灵活特性。
举个例子,TypeScript里你可以用any类型到处糊,但ArkTS直接把这个类型砍掉了。为什么?因为鸿蒙团队希望你在编译阶段就把类型问题解决掉,别等到运行时才崩溃。我在项目中遇到过好几次,就是因为类型不匹配导致UI渲染异常,排查起来特别痛苦。
核心要点:ArkTS = TypeScript的严格子集 + 鸿蒙UI框架的深度绑定。你写ArkTS,本质上就是在写一种更安全的TypeScript。
3.2 基本数据类型:string, number, boolean
这三种类型是咱们写代码的"砖块"。别看简单,用不好照样出问题。
3.2.1 string(字符串)
字符串就是文本。ArkTS里用双引号或单引号都行,我个人习惯用双引号,因为跟HTML属性写法一致,不容易混淆。
let appName: string = "鸿蒙计算器";
let version: string = '1.0.0';
let description: string = `当前版本:${version}`; // 模板字符串,支持变量嵌入
这里有个坑:模板字符串(反引号)在ArkTS里完全支持。我刚开始用的时候还担心不支持,结果发现鸿蒙团队把ES6的这套语法保留得很好。
3.2.2 number(数字)
ArkTS里的数字只有一种类型——number,不分整数和浮点数。这点跟JavaScript一样。
let count: number = 42;
let price: number = 19.99;
let hexValue: number = 0xFF; // 十六进制,255
嗯,这里要注意:ArkTS不支持位运算。如果你以前写C++或者Java,习惯用位运算做标志位,那在ArkTS里得换个思路。我曾经把一个位运算的算法直接搬过来,结果编译报错,查了半天文档才发现这个限制。
3.2.3 boolean(布尔值)
布尔值就两个:true和false。简单吧?但实际开发中,条件判断的坑往往出在这里。
let isLoggedIn: boolean = false;
let hasPermission: boolean = true;
// 错误写法(ArkTS不允许)
if (isLoggedIn) { // 这样写没问题,但下面这样不行
// ...
}
// 正确写法
if (isLoggedIn === true) {
// ...
}
避坑指南:我曾经在条件判断里直接写 if (userCount),以为0会自动转成false。但在ArkTS里,这种隐式转换是不允许的。你必须显式写成 if (userCount !== 0)。记住:ArkTS不搞"真值"和"假值"那一套。
3.3 变量声明:let 和 const
ArkTS里声明变量只有两种方式:let和const。没有var,这点跟现代TypeScript保持一致。
3.3.1 let:可变变量
用let声明的变量,值可以改。但要注意作用域——它只在当前代码块内有效。
let score: number = 0;
score = 100; // 可以重新赋值
if (true) {
let score: number = 50; // 这里的score是新的变量,跟外面的没关系
console.log(score); // 输出50
}
console.log(score); // 输出100
我个人建议:能用const就别用let。为什么?因为const能帮你减少很多"变量被意外修改"的bug。我在项目中见过太多因为变量被不小心改了值,导致UI显示异常的情况。
3.3.2 const:常量
const声明的变量,一旦赋值就不能再改。注意,是"不能重新赋值",但如果存的是对象,对象的属性还是可以改的。
const MAX_COUNT: number = 100;
const APP_NAME: string = "我的应用";
// 下面这行会报错
// MAX_COUNT = 200;
// 对象常量
const user = { name: "张三", age: 25 };
user.age = 26; // 允许,因为改的是属性,不是重新赋值
// user = { name: "李四" }; // 报错,不能重新赋值
小技巧:命名常量时,我习惯用全大写加下划线,比如 MAX_RETRY_COUNT。这样一眼就能看出这是个常量,不会手滑去修改它。
3.4 条件与循环语句
这部分跟大多数语言差不多,但ArkTS有一些细节需要注意。
3.4.1 if-else 条件判断
写法跟JavaScript完全一样。但记住我刚才说的:条件表达式必须是布尔类型。
let age: number = 18;
if (age >= 18) {
console.log("成年人");
} else if (age >= 6) {
console.log("未成年人");
} else {
console.log("儿童");
}
你想想看,如果写成 if (age),ArkTS会直接报错。因为它不知道你想把age转成什么布尔值。这种"严格"其实是在保护你——避免那些隐式转换带来的诡异bug。
3.4.2 switch 语句
switch在ArkTS里也能用,但有个限制:case后面的值必须是常量,不能是变量。
let status: number = 2;
let message: string = "";
switch (status) {
case 0:
message = "等待中";
break;
case 1:
message = "进行中";
break;
case 2:
message = "已完成";
break;
default:
message = "未知状态";
}
3.4.3 for 循环
ArkTS支持三种for循环。我个人最常用的是for...of,因为它最直观。
// 传统for循环
for (let i: number = 0; i < 5; i++) {
console.log(i);
}
// for...of(推荐)
let fruits: string[] = ["苹果", "香蕉", "橘子"];
for (let fruit of fruits) {
console.log(fruit);
}
// for...in(遍历索引)
for (let index in fruits) {
console.log(index); // 输出 0, 1, 2
}
注意:for...in遍历的是索引(字符串类型),for...of遍历的是值。我刚开始学的时候经常搞混,后来记住一句话:"in"是索引,"of"是值。
3.4.4 while 和 do-while
这两个用得相对少一些,但偶尔也会用到。写法跟其他语言一样。
let i: number = 0;
while (i < 3) {
console.log(i);
i++;
}
// do-while:至少执行一次
let j: number = 0;
do {
console.log(j);
j++;
} while (j < 3);
3.5 本章知识体系
下面这张图帮你梳理了本章的核心知识点。建议保存下来,写代码时对照着看。
3.6 写在最后
好了,今天的内容就到这里。ArkTS的基础语法其实不难,难的是养成"类型安全"的思维习惯。我刚开始从JavaScript转过来时,经常被编译器的报错搞得心烦。但坚持了一周后,我发现代码质量确实提高了——很多潜在bug在编译阶段就被揪出来了。
下一章咱们会深入聊聊函数和数组,这些都是写业务逻辑的"基本功"。到时候我会分享一些我在实际项目里踩过的坑,保证让你少走弯路。
公众号:蓝海资料掘金营,微信deep3321