11. ArkTS 标识符 & 关键字|命名规则详解

标识符,就是我们给变量、常量起的名字。编译器按一套规则检查它。名字不合规则,代码直接报错。

名字里只允许四样:英文字母、数字、下划线 _、美元符号 $。

不能以数字开头。1SHOP_SIGN 不行,SHOP_SIGN 可以。

大小写是两个名字。milkTea 和 MilkTea 不是同一个标识符,这里很容易搞混。

关键字也不能拿来当名字。let、const、string 这些词,编译器留着自己用。

动画视频在《11. ArkTS 标识符 & 关键字|命名规则详解》 。

关键字

关键字是 ArkTS 预先保留、自带特殊语法含义的词。编译器识别它们,用来完成特定功能,不可以作为标识符。

类型名也占着。string 是字符串类型,写在冒号后面,不能再拿去当变量名。number、boolean 同样不行。

关键字 作用 关键字 作用
abstract 抽象类修饰符 as 类型强制转换
async 异步函数声明 await 等待异步任务执行完成
break 跳出循环或 switch 分支 case switch 语句的分支
class 定义类 const 声明只读常量
constructor 类的构造方法 continue 跳过本次循环,进入下一轮
do do-while 循环的起始 else 条件分支,否则
enum 定义枚举 export 导出模块成员
extends 类继承 false 布尔假值
final 禁止类被继承,变量不可二次修改 for for 循环
function 定义函数 if 条件判断
implements 实现接口 import 导入模块成员
interface 定义接口 internal 模块内访问权限
let 声明可变变量 native 调用原生 C/C++ 代码
new 实例化对象 null 空值
override 重写父类方法 package 包名定义
private 私有访问权限 protected 受保护访问权限
public 公有访问权限 return 函数返回结果
static 静态成员修饰符 super 调用父类的构造与方法
switch 多分支条件语句 this 指代当前实例对象
throw 主动抛出异常 true 布尔真值
try 捕获异常的代码块 while while 循环
undefined 未定义值

类型名

这些是基础类型,同样不能用来命名。

类型名 作用 类型名 作用
boolean 布尔类型 number 数字类型
string 字符串类型 void 无返回值类型
bigint 大整数类型 byte 字节整数类型
short 短整数类型 int 整数类型
long 长整数类型 float 单精度浮点类型
double 双精度浮点类型 char 单个字符类型
object 对象类型

这些也不能当名字

关键字 作用 关键字 作用
catch 捕获异常 declare 声明外部类型
finally 异常收尾代码块 from 导入模块的来源
get 属性读取器 in 遍历对象属性
instanceof 判断对象类型 namespace 命名空间
of 遍历数组元素 out 输出参数标记
readonly 只读属性 set 属性写入器
type 自定义类型别名 typeof 获取变量类型

起名字时先躲开上面这些词。某个词后面课上才会用到,到时候再看它干什么。

这段代码错在哪

还是奶茶店那一单。下面这份代码过不了编译,里面有五处命名问题。

复制代码
/*------------------------------
标识符命名规则
-------------------------------*/
// 奶茶店招牌
const 1SHOP_SIGN: string = '甜蜜奶茶屋';
// SHOP_SIGN = '快乐奶茶铺';
// 杯型
let cup-size: string = '大杯';
// 奶茶名称
let let: string = '珍珠奶茶';
// 价格(单位:元)
let string: number = 15;
let milkTea: string = '红豆奶茶';
let MilkTea: string = '烧仙草奶茶';

第一处,const 1SHOP_SIGN。标识符不能以数字开头。改成 SHOP_SIGN。引号里的店名不动,还是甜蜜奶茶屋。

第二处,let cup-size。减号不在允许的字符里。标识符只能用字母、数字、下划线和 $。改成 cup_size。

第三处,let let。let 是关键字,不能作为标识符。奶茶名称改成 drinkName。

第四处,let string。string 是基础类型保留字,同样不能用来命名。价格改成 price。

最后两行,milkTea 和 MilkTea。问一句:这是同一个变量吗?不是。ArkTS 严格区分大小写,它们是两个独立的变量。红豆奶茶改成 redBeanMilkTea,烧仙草奶茶改成 grassJellyMilkTea。

改完再看一遍

五处都改过,代码是这样:

复制代码
/*------------------------------
标识符命名规则
-------------------------------*/
// 奶茶店招牌
const SHOP_SIGN: string = '甜蜜奶茶屋';
// SHOP_SIGN = '快乐奶茶铺';
// 杯型
let cup_size: string = '大杯';
// 奶茶名称
let drinkName: string = '珍珠奶茶';
// 价格(单位:元)
let price: number = 15;
// 红豆奶茶
let redBeanMilkTea: string = '红豆奶茶';
// 烧仙草奶茶
let grassJellyMilkTea: string = '烧仙草奶茶';

数字开头去掉了,减号换成下划线。let 和 string 还给编译器。红豆和烧仙草各用各的名字,不再靠大小写去分。