Java-Scala编程规范超精简

组内大佬讲解的编码规范,编码规范的根本目的就是要让不仅代码可以一目了然,也可以很容易的理解开发人员所编写的代码程的用途和意义。 由此,用来减少项目中因为开发维护人员的更替或由于长时间不维护造成的记忆模糊或混乱等情况带来的对代码所实现的真正功能的理解困难和歧义。 另外也提高了代码复查效率和效果。

好的代码不是屎山,是人人能看懂,人人能改写的

业内方案:

  • 阿里:https://github.com/alibaba/p3c 

  • databricks:https://github.com/databricks/scala-style-guide/blob/master/README-ZH.md

  •  google:https://github.com/zh-google-styleguide/zh-google-styleguide

易于维护或者让别人读懂的代码,至少包含三部分

  • 命名规范
  • 代码展示风格
  • 代码注释

一、命名规范

原则

  • 命名符合本语言特点
  • 命名体现代码元素特征
  • 命名最好望文知义

具体做法

  • 不允许以下划线或者美元符号开头和结尾 :必须以字母,以字母和数字结尾
  • 严禁使用拼音和英文混合的方式,更不能使用中文
  • 驼峰式命名 :类用大驼峰 ,变量、方法用小驼峰
  • 常量名必须大写,单词间用下划线隔开,力求语义完整,不要嫌长
  • 抽象类必须以Abstract或者Base开头,异常类必须以Exception结尾,测试类必须以Test结尾
  • POJO类中boolean不可以以is作为前缀
  • 包名统一使用小写,且只能用单数 ,包名应该遵循 Java 中包名的命名约定,即使用全小写的 ASCII 字母。
  • 杜绝不规范的缩写 :condition -> con ? connection?
  • 在常量或者命名变量时候表示类型的单词放在后面,增加辨识度 : xxxList、xxxMap
  • 出现模块、接口、类、方法使用了设计模式,应该在命名时出现具体设计模式
  • 枚举类以enum后缀,成员大写,单词用下划线隔开
  • 不允许代码中直接使用魔法值(即未经预先定义的常量)

二、代码展示风格:

原则:

  • 表现代码的层次性和规律性
  • 可以直观快速准确地理解业务逻辑

具体做法

  • 缩进方式空格? tab? 2、4、8空格,推荐使用两个空格
  • 二三目运算符左右两边必须加空格 :val i = 1 + 1
  • 注释的双斜线与注释内容之间有且仅有一个空格 // 注释正文
  • 左右小括号与括号内部的相邻字符之间不要出现空格 :(aa, bb)
  • 左大括号前必须加空格
  • 逗号后保留一个空格。 Seq("a", "b", "c") // 使用这种方式
  • 冒号后保留一个空格。
  • 运算符与下文一起换行
  • 方法调用的点符号与下文一起换行
  • 方法调用的多个参数需要换行时,在逗号后换行
  • 在括号前不要换行
  • 控制语句:if、else 、for、while、do-while 等语句中必须使用大括号,即使有一行代码
  • 条件表达式不允许出现出现有赋值操作、也不允许在判断表达式中出现复杂的(3个及以上)逻辑组合

三、代码注释:

原则

  • 尽量写注释
  • 少些注释,好的代码是可以根据命名规范和命名来了解方法内容的
  • 修改代码也要修改注释

风格:

  • 文档注释
  • 文本注释 : 注释是对代码的“提示”,而不是文档
  • 类的注释要有 ,
  • 变量注释在后面注释
  • 类和方法在上面注释
  • 加一个类模板

关于闭包

  • 闭包中避免使用 return
  • 会被编译器转成 scala.runtime.NonLocalReturnControl 异常的 try/catch 语句,这可能会导致意外行为
  • 复杂的大型项目尽量不适用闭包
  • 抽象完善一些工具类

其他

  • 避免使用多参数列表
    • case class Person(name: String, age: Int)(secret: String)
    • Implicit 有着非常复杂的解析规则,这会使代码变得极其难以理解。
  • 不要使用符号作为方法名
    • channel ! msg
    • stream1 >>= stream2

一般强制规定:

  1. 不允许以下划线或者美元符号开头和结尾 :必须以字母,以字母和数字结尾
  2. 严禁使用拼音和英文混合的方式,更不能使用中文
  3. 驼峰式命名 :类用大驼峰 ,变量、方法用小驼峰
  4. 常量名必须大写,单词间用下划线隔开,力求语义完整,不要嫌长
  5. 抽象类必须以Abstract或者Base开头,异常类必须以Exception结尾,测试类必须以Test结尾
  6. POJO类中boolean不可以以is作为前缀
  7. 包名统一使用小写,且只能用单数 ,包名应该遵循 Java 中包名的命名约定,即使用全小写的 ASCII 字母。
  8. 二三目运算符左右两边必须加空格 :val i = 1 + 1
  9. 左右小括号与括号内部的相邻字符之间不要出现空格 :(aa, bb)
  10. 左大括号前必须加空格
  11. 逗号后保留一个空格。 Seq("a", "b", "c") // 使用这种方式
  12. 冒号后保留一个空格。
  13. 用来分割功能相似,逻辑内聚、意思相近的代码片段,使代码布局更加清晰,尽量让有关联的代码块凑到一起。
  14. 运算符与下文一起换行
  15. 方法调用的点符号与下文一起换行
  16. 方法调用的多个参数需要换行时,在逗号后换行
  17. 在括号前不要换行
  18. 尽量避免采用取反逻辑运算符
  19. 方法声明应该加括号(即使没有参数列表)
  20. 条件表达式不允许出现出现有赋值操作、也不允许在判断表达式中出现复杂的(3个及以上)逻辑组合
  21. 变量注释在后面注释
  22. 类和方法在上面注释

感谢分享!

你可能感兴趣的:(代码规范,java,scala)