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