代码风格
本文参考业界标准和实践,结合ArkTS语言特点,提供编码指南,以提高代码的规范性、安全性和性能。
规则来源
ArkTS在保持TypeScript基本语法风格的基础上,进一步强化静态检查和分析。本文部分规则筛选自《OpenHarmony应用TS&JS编程指南》,为ArkTS语言新增的语法添加了规则,旨在提高代码可读性、执行性能。
总体原则
规则分为两个级别:要求和建议。
要求:表示原则上应该遵从。本文所有内容目前均为针对ArkTS的要求。
建议:表示该条款属于最佳实践,可结合实际情况考虑是否纳入。
命名
为标识符取一个好名字,提高代码可读性
【描述】
好的标识符命名应遵循以下原则:
- 清晰表达意图,避免使用单个字母或非标准缩写命名。
- 使用正确的英文单词并符合英文语法,不要使用中文拼音。
- 确保语句清晰,避免歧义。
类名、枚举名、命名空间名采用UpperCamelCase风格
【级别】建议
【描述】
类采用首字母大写的驼峰命名法。 类名通常是名词或名词短语,例如Person、Student、Worker。不应使用动词,也应该避免类似Data、Info这样的模糊词。
【正例】
// 类名
class User {
username: string
constructor(username: string) {
this.username = username;
}
sayHi() {
console.info('hi' + this.username);
}
}
// 枚举名
enum UserType {
TEACHER = 0,
STUDENT = 1
};
// 命名空间
namespace Base64Utils {
function encrypt() {
// todo encrypt
}
function decrypt() {
// todo decrypt
}
};
变量名、方法名、参数名采用lowerCamelCase风格
【级别】建议
【描述】
函数的命名通常是动词或动词短语,采用小驼峰命名。示例如下:
- load + 属性名()
- put + 属性名()
- is + 布尔属性名()
- has + 名词/形容词()
- 动词()
- 动词 + 宾语() 变量名通常是名词或名词短语,采用小驼峰命名,便于理解。
【正例】
let msg = 'Hello world';
function sendMsg(msg: string) {
// todo send message
}
let userName = 'Zhangsan';
function findUser(userName: string) {
// todo find user by user name
}
常量名、枚举值名采用全部大写,单词间使用下划线隔开
【级别】建议
【描述】
常量命名,应该由全大写单词与下划线组成,单词间用下划线分割。常量命名要尽量表达完整的语义。
【正例】
const MAX_USER_SIZE = 10000;
enum UserType {
TEACHER = 0,
STUDENT = 1
};
避免使用否定的布尔变量名,布尔型的局部变量或方法需加上表达是非意义的前缀
【级别】建议
【描述】
布尔型的局部变量建议加上表达是非意义的前缀,比如is,也可以是has、can、should等。但是,当使用逻辑非运算符,并出现双重否定时,会出现理解问题,比如!isNotError,难以理解。因此,应避免定义否定的布尔变量名。
【反例】
let isNoError = true;
let isNotFound = false;
function empty() {}
function next() {}
【正例】
let isError = false;
let isFound = true;
function isEmpty() {}
function hasNext() {}
格式
使用空格缩进,禁止使用tab字符
【级别】建议
【描述】
只允许使用空格(space)进行缩进。
建议大部分场景优先使用2个空格,换行导致的缩进优先使用4个空格。 不允许插入制表符Tab。当前几乎所有的集成开发环境(IDE)和代码编辑器都支持配置将Tab键自动扩展为2个空格输入,应在代码编辑器中配置使用空格进行缩进。
【正例】
class DataSource {
id: number = 0
title: string = ''
content: string = ''
}
const dataSource: DataSource[] = [
{
id: 1,
title: 'Title 1',
content: 'Content 1'
},
{
id: 2,
title: 'Title 2',
content: 'Content 2'
}
];
function test(dataSource: DataSource[]) {
if (!dataSource.length) {
return;
}
for (let data of dataSource) {
if (!data || !data.id || !data.title || !data.content) {
continue;
}
// some code
}
// some code
}
行宽不超过120个字符
【级别】建议
【描述】
代码行宽不宜过长,否则不利于阅读。
控制行宽可以间接引导程序员缩短函数和变量的命名,减少嵌套层数,精炼注释,从而提升代码可读性。 建议每行字符数不超过120个,除非需要显著增加可读性(超过120个),且不会隐藏信息。 例外:如果一行注释包含了超过120个字符的命令或URL,则可以保持一行,以方便复制、粘贴和通过grep查找;预处理的error信息在一行便于阅读和理解,即使超过120个字符。