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

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

业内方案:

  • 阿里: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编程规范超精简相关推荐

  1. 黑马程序员:Java基础总结----Java语言编程规范

       黑马程序员:Java基础总结        Java语言编程规范:参考自SUN公司文档  ASP.Net+Android+IO开发..Net培训.期待与您交流!  I.   排版规范 A.  规 ...

  2. Java并发编程Future超详细教程

    非原创,自己保存学习用,传播请参考原文. 原文链接:Java并发编程Future超详细教程 前言 创建线程有几种方式?这个问题的答案应该是可以脱口而出的吧 继承 Thread 类实现 Runnable ...

  3. [转]阿里编程规范(精简版)

    文章目录 1.简介 2.命名: 3.格式规约 4.注释规约 5.OOP规约 6.集合处理 7.控制语句 8.异常 9.日志 10.单元测试 11.工程规约 1.简介 统一规范标准将有助于提高行业编码规 ...

  4. Java安全编程规范总结

    安全编程规范学习 不可信数据定义 数据校验 规则1.1:跨信任边界传递的不可信数据使用前必须进行校验 禁止直接使用不可信数据来拼接SQL语句 说明:收录日常工作中会涉及到的 不可信数据定义 文件(包括 ...

  5. java的编程规范_JAVA编程规范-OOP规范

    1.[强制]避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访问即可. 2.[强制]所有的覆写方法,必须加@Override注解. 反例:getObject ...

  6. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  7. 编程规范学习资料清单

    资料清单包括: 1.       c C软件编程规范总则.lwp 华为C编程规范 2.       c# 华为C#编码规范 3.       c++ C++编程规范 C++编程规范_1(排版) C++ ...

  8. Java 编程规范 -- 易错精简版

    Part 1 – 易错点 --  edit by liudeyu,If you have any adivice or suggestion, please participate in the di ...

  9. Java并发编程(中下篇)从入门到深入 超详细笔记

    接上一篇博客笔记:Java并发编程(中上篇)从入门到深入 超详细笔记_未来很长,别只看眼前的博客-CSDN博客https://blog.csdn.net/weixin_53142722/article ...

  10. Java中的多线程编程(超详细总结)

    文章目录 Java中的多线程编程(超详细总结) 一.线程与多线程的概念 二.线程与进程之间的关系 三.一个线程的生命周期 四.多线程的目的和意义 五.线程的实现的方式 Java中的多线程编程(超详细总 ...

最新文章

  1. myeclipse中git的使用
  2. Hadoop实战第四章--读书笔记
  3. 关于Rocchio算法和向量空间模型反馈
  4. android 外文期刊_AndroSimilar: Robust signature for detecting variants of Android malware
  5. 如何理解Library List
  6. 接口隔离原则(ISP)
  7. 特斯拉:召回不涉及国产车型 也与“刹车失灵”无关
  8. 学习可以借鉴的大牛们的网站
  9. 用C语言写一个查单词的小demo
  10. python反编译_反编译 python
  11. 存储过程与自定义函数的区别
  12. CSA云安全指南V4.0 D9 D10
  13. 安利3个高清电脑壁纸网站
  14. 灯的开关状态 :有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯 打开;3 号将凡是 3 的倍数的灯作相
  15. java八皇后答案_java八皇后问题详解
  16. [week15] C - ZJM与纸条(选做)—— KMP算法
  17. 记录一次使用华为云服务器(从零搭建环境)
  18. Apache Calcite 论文翻译
  19. word插入公式,如何输入事例四条件(或者更多)
  20. 前端开发规范:CSS 代码规范指南

热门文章

  1. LINUX内核编译选项-4
  2. Linux driver读书笔记(2) - Bus Types总线类型(mybus/mydevice/mydriver实例)
  3. python自动填表单_用python-webdriver实现自动填表
  4. 无线覆盖技术的重要性
  5. [转]中国七大顶级黑客X档案
  6. 电气工程学计算机有用吗,电气工程及其自动化就业方向 有前途吗
  7. 抖音上非常火的整人小程序
  8. C++/OpenGL 入门(1):关于VS2017 中OpenGL部分安装过程
  9. WPE 过滤器 高级滤镜
  10. opencv的第一个lena图片显示