# 代码格式约定 ::: details 目录 [[toc]] ::: ## 意义 ::: tip 使应用程序的结构和编码风格标准化,以便于阅读和理解这段编码。 好的编码约定可使源代码严谨、可读性强且意义清楚。 ::: ## 格式约定 ### 要求 启动`ESLint`,不可存在语法报错问题。特殊情况,无法解决的,提出,共同探讨。 ### 缩进 缩进统一为4格 ### 注释 单行注释符后留一个空格 ```typescript // this is comment ``` 如果某段代码有功能未实现,或者有待完善,必须添加`TODO`标记,`TODO`前后应留一个空格 ```typescript private drawBox(painter: SPainter): void { // TODO 未实现绘制方块 } ``` 属性注释格式 ```typescript /** ... */ ``` 功能函数注释:注释将会以预定格式出现在API文档中。它以“/**”开头,以“*/”结束,其间的每一行均以“*”开头(均与开始符的第一个“*”对齐),且注释内容与“*”间留一个空格 ```typescript /** * 功能说明 * * @param 参数名 参数说明 * @param 参数名 参数说明 * @param 参数名 参数说明 * @return 返回值说明 */ ``` ### 语法 私有变量以下划线_开头 ```typescript private _index = -1; ``` `import`导入时,需顶格,使用`{}`引用模块时,`{}`中前后需空一格 ```typescript ``` 类添加类的注释头 姓名 + 邮箱,如果多个,用逗号分割。 ```javascript /** * 俄罗斯方块视图 * * @author 郝洁 */ /** * 俄罗斯方块视图 * * @author 郝建龙 ,郝洁 */ ``` 类中的属性,方法函数添加注释,if语句,for循环需添加注释,括号前后加空格,语句结束需空一行 ```typescript {23,24,26} class TestView extends SCanvasView { /** 背景表示数组 */ map: number[][] = []; /** * 构造函数 * * @param id canvas DOM id */ constructor(id: string) { super(id); } } /** * 是否碰撞 * * @param x x 坐标 * @param y y 坐标 * @param dir 方块变形索引 * @return 是否碰撞 */ private checkKnocked(x: number, y: number, dir: number): boolean { for (let row = 0; row < 4; row++) { // 绘制图形行数 for (let col = 0; col < 4; col++) { // 绘制图形列数 // 判断是否重合,每种图形四个一组,四种变形的某种变形,不为零表示绘制(确定方块),坐标转换,背景图中绘制 if (this.box[this.boxType * 4 + dir][row][col] != 0 && this.map[y + row][x + col] != 0) { return true; } } } return false; } ``` ```typescript {4,8} switch (type) { // 类型判断 case 0: // 空白 break; case -1: // 边界 painter.drawRoundRect(x, y, 28, 28, 6); break; default: // 填充 painter.drawRoundRect(x, y, 28, 28, 6); break; } ``` ```typescript {7,12} private remove(): void { // 循环行数,不包含底部填充2行 for (let row = 0; row < 20; row++) { for (let col = 2; col < 12; col++) { // ... } if (flag) { // 标记删除 // ... } } if (removeCount > 0) { // 记录消除行数 // ... } ```