标识符,就是我们给变量、常量起的名字。编译器按一套规则检查它。名字不合规则,代码直接报错。
名字里只允许四样:英文字母、数字、下划线_、美元符号$。
不能以数字开头。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还给编译器。红豆和烧仙草各用各的名字,不再靠大小写去分。