1代码风格
1.1缩进
- 代码缩进要求:4个空白符;
- 所有块状结构都要求缩进,switch语句缩进要合理;
- 坚持一致原则,维护同事的代码时,应该保持原有的编码风格;
1.2空格
- 注释符两边的空白符必不可少;
- 任何保留字与紧随其后的左括号之间要有一个空格;
- 任何保留字与其前面的右大括号之间要有一个空格;
- 在任何二元或三元运算符的两侧必须有空格;
- 一元运算符与操作对象之间不允许有空格;
- 在
,
:
;
及右括号)
后必须空格 - 数组初始化中,大括号内的空格是可选的;
- 行尾不得有多余的空格;
- 代码的水平对齐可以不做;
1.3空行
- 类内连续成员之间,必须有1个空行;
- 类内的第一个成员前或最后一个成员后的空行是可选的;
- 没有必要添加多个连续的空行;
- 在函数体内,语句的逻辑分组间可使用空行;
1.4换行
-
项目中推荐100为字符个数的列限制;
-
自动换行的基本准则是:更倾向于在更高的语法级别处断开;
-
如果在非赋值运算符(±*/)处断开,那么在该符号前断开;
-
如果在赋值运算符(==)处断开,通常的做法是在该符号后断开
-
自动换行时函数名与左括号留在同一行;
-
自动换行时逗号与前面的内容留在同一行;
-
自动换行时第一行后的每一行至少比第一行多缩进4个空格;
-
对于非空块、大括号遵循Kernighan和Ritchie风格(Egyptian brackets)
- 左大括号前不换行,在左大括号后换行;
- 右大括号前换行,如果右大括号是一个语句、函数体或类的终止;否则不换行。例如,如果右大括号后面是else或逗号,则不换行。
-
**函数的返回值不可以用括号包住,**会降低代码可读性
# good return count + 100; # bad return (count + 100);
2命名
2.1通用命名
-
代表完全相同意义的命名必须相同;如果一个变量在不同的地方代表的意义完全相同,那么不管是用在前端、后端、数据库表名、字段名等,请务必起相同的名字;
-
良好的命名应该能顾名思义,不需要解释;
# good int(student_count) # 学生数量 # bad int(count) # 学生数量
-
谨慎使用缩略词,不常见的缩略词会大大降低代码的可读性;避免缩写,除非该缩写是众所周知的,如HTML、URL等;
-
命名应该是简短且有意义的。
2.2编程语言中的命名
-
类名、接口名以UpperCamelCase风格编写;
class IndexHandler(): pass
-
类名使用名词或名词短语;
-
接口使用RESTfull设计分格;
-
测试类的命名以它要测试的类的名称开始,以Test结束;
-
方法名以lowerCamelCase风格编写
def function(): pass
-
建议方法名使用动宾短语,也可以使用动词;
-
常量名以CONSTANT_CASE风格编写;
-
减少代码中的硬编码,代码中不允许出现直接硬编码的字面常量,尤其是重复出现的硬编码;你需要做的是将硬编码定义成常量;如果常量在一个类中用到,则在类中定义,否则可以在公共类中定义常量。
-
常量必须用常量修饰符修饰;
-
非常量字段名以lowerCamelCase风格编写;
-
参数名以lowerCamelCase风格编写,参数应该避免使用单字符进行命名,除了临时变量和循环变量;
-
boolean类型的变量命名以is或has开头;
-
集合、数组类型的变量,常用名词复数。
3注释
- 单行注释使用 #,多行注释使用”“” chars “”“
- 块注释与其周围的代码在同一缩进级别;
- 禁止没有意义的注释;很多时候,判断一句注释是不是废话还跟开发者水平有关;
- 注释一般不包含语言本身的语法、语言内置的API的说明、第三方类库(如Spring等)某个函数的用法的说明;不懂的去看相应的开发文档;
- 对整段代码进行注释说明,而不是逐行注释;
- 只进行必要的注释,注释不是越多越好;
- 对编写的比较Trick的代码做注释,方便他人理解。
4语言特性
4.1变量
-
每次只声明一个变量;
-
需要时才声明,并尽快进行初始化;
不要在一个代码块的开头把局部变量一次性都声明了,而是在第一次需要使用它时才声明;局部变量在声明时最好就进行初始化,或者声明之后尽快进行初始化;
变量声明与使用的距离越远,代码的阅读与维护成本就越高;
从优化方面讲,这样做也是有好处的;
-
尽量使用局部变量;
-
变量在真正需要的时候才开始创建。
4.2语句
- 一行最多一个语句;
- 禁止连续赋值;连续赋值不仅影响可读性,而且很多时候容易出错;
- 避免深层嵌套;多级嵌套降低了代码的可读性;
- 使用大括号,即使大括号是可选的
- 如果函数或全局中的else块后没有任何语句,可以删除else
- 避免在循环中重复获取长度;
- 嵌套循环将小循环写在外层;
- 避免在循环中做耗时的工作。
4.3函数
- 函数的长度控制在50行以内,太长的函数难以维护;关于一个函数的规范行数没有统一标准,40行、60行都行;
- 函数的参数控制在6个以内。