# 前言
此篇闲聊贴,大家可以随意发表自己的意见
# 命名风格
- 蛇形命名法
也就是类似 user_name 这种的,不管是类名,函数名,变量名,枚举,接口,一律使用
- 原因
强迫症,不喜欢看到驼峰有些小写开头,有些大写开头,又有些全大写的命名方式,感觉太杂乱,眼睛看着也没有蛇形清晰
以前用驼峰,现在项目要求也用驼峰,不过我私下还是蛇形,嘿嘿嘿
虽然是蛇形,不过我还是有一套自己 久经考验 的命名格式
# 命名结构
变量含义在前,变量类型在后,
- boolean:
let open_b: boolean;
let touch_b: boolean;
- string:
let name_s: string;
let time_s: string;
- number:
let count_n: number;
let time_n: number;
- object:若是类型名超过 4 个字符则直接省略或者简写
let temp_node: cc.Node;
let temp_anim: cc.Animation;
- any 或不清楚类型:那就直接省略
let temp: any;
- array:一维便是一 s,对象类型用 a 代替
// 基础数据类型数据
let temp_ss: string[];
let temp_ns: number[];
let temp_bs: boolean[];
// 对象数组
let node_as: cc.Node[];
// 多维数组
let node_ass: cc.Node[][];
let node_asss: cc.Node[][][];
如果用我这套命名法,那么不用把鼠标放变量上,一眼就能知道这个变量是什么类型,加快 code 速度
# 命名规则
首先必须满足上面的类型规则,接下来…
- Class
- private 成员/函数:下划线开头,代表内部访问成员,从学习C++遗留至今
private _test: any;
- protected 成员/函数:下划线开头,代表内部访问成员,如上
protected _test: any;
- public 成员/函数:不用下划线开头,代表内外部访问成员
public test: any;
- Function
- 参数:下划线结尾,代表外部参数,能一眼分辨函数外部参数和函数内部变量的区别
class test {
public func(test_b_: boolean, args_as_: any[]): void { ... }
}
- 复数变量
- 直接在第二个及之后变量末尾追加数字,为什么是第二个?因为有些时候你不确定是否会出现复数变量
let temp_n: number;
let temp2_n: number;
// 循环示例,用的最多!!!,也是最方便的
this.node.children.forEach((v, k_n)=> {
v.children.forEach((v2, k2_n)=> {
});
});
# 代码块划分
不知道各位是什么注释代码块的呢?会不会出现代码块注释和变量注释放在上下两行很难看的情况,或者留出几行空间注释,我觉得都不行
function temp() {
// 这里是代码块1
{
let temp_n = 0;
// 这里是代码块2
{
let temp_n = 0;
}
}
}
用块作用域来划分代码块, 就算出现变量命名相同也不会警告,更可以通过 ide 折叠代码块,获得极好的代码阅读体验!
# 文件命名
采用目录跟进式命名
// assets/script/main/login
则 login 文件夹下的 ts 文件命名为:main_login_xxx.ts
# 模块结构
当初研究了段时间模块拆分,最终选择如下
// 存放模块内部使用的接口,类型,枚举,常量等
module _test { ... }
class test { ... }
// 存放模块内部和外部使用的接口,类型,枚举,常量等
export module test_ { ... }
export default test;
# 模块集成
写框架必配,我用过几乎所有写法,下面的是我最推荐使用的方式
// ui_a.ts
export default a;
// ui_b.ts
export default b;
// ui_export.ts
export { a, a_ } from "./a";
export { b, b_ } from "./b";
// ui.ts
import * as ui from "./ui_export";
export default ui;