代码规范 : 格式编排
来源:互联网 发布:linux如何查看raid 编辑:程序博客网 时间:2024/04/29 08:06
感觉写代码没有激情怎么办?
或许这是你要的激情…
好了不开玩笑, 现在扯扯写代码时的排版
当你在阅读报纸的时候,或者是该文章的时候,你会首先看到最上面吸引眼球的部分, 然后就是一些的主要标题, 内容会跟随着标题逐渐展开.
那么在编写的程序的时候, 为什么不这样做, 要在混乱无章的代码迷宫中找到出口, 那确实是一件挺费心的事. 所以在这一节,教你如何对代码的格式进行编排
顺序
在阅读报纸的时候, 开始是整个故事的大纲>副标题>第一段内容>然后是细节展开,自上而下
就像在阅读报纸一样,编写代码时,可以按照固定的顺序进行编写,
类内方法定义顺序依次是(只是推荐):
公共静态常量 V 私有静态常量 V 公共变量 V 私有实体变量 V 构造函数 V 公有函数或保护函数 V 私有函数 V getter/setter 函数
函数的排列
外部:
- 被调用函数应该放在调用它的函数的下面
- 构造方法 : 同名构造方法的顺序 从无参数到多参数,便于阅读
内部:
- 排列一: 按照 初始化- 输入-修改-输出的顺序进行排列
- 排列二: 将有关联的方法或定义放到一起
- 排列三: 将状态或出错之后的变量放在最后
不要将子程序的参数用做工作变量:应该在开始处创建一个新的对象
String getCode(String code){ String insideCode = code; // 对 insideCode 进行操作 }
getter/setter
- 列表内容setter 方法中,参数名称与类成员变量名称一致, this.成员名=参
- 在getter/setter 方法中,尽量不要增加业务逻辑,增加排查问题的难度。
语句顺序
- 必须有明确顺序的语句
设法组织代码,是依赖关系变得非常明显(依赖关系,下一条子句依赖于上一条子句的结果)
// 下面的代码下一条子句依赖于上一条子句,这种就是依赖关系 List<String> addressCodes = getAddressCodes(); boolean doSuccess = setAddress( addressCodes );
- 顺序无关语句
使代码易于自上而下地阅读
将相关的语句组织到一起,
// 例子: private String addressCode; private String addressName; private int age; private int tall; // 反例:混乱 private String addressCode; private int tall; private int age; private String addressName;
空白行
用空白行隔开思路或者函数,因为人在往下阅读的时候,目光总在空白的行
函数和函数之间使用空白行隔开,这已经是约定俗成
函数内部个人认为不同的逻辑之间也可以用空白行隔开,便于理解
(且不说下面的代码写得好与不好,主要是演示了空白行和留空白隔开逻辑的作用)
public List< Map<String, Object> > getdata(String pk) { List< Map<String, Object> > listarr = new ArrayList<>(); List<DataRoleClassVO> list = smdatarole.getlist(pk); for(int i = 0; i < list.size(); i++){ Map<String,Object> json=new HashMap<String,Object>(); json.put("id", list.get(i).getPkDataroleclass()); json.put("number", i+1); List<DataRoleVO> dto = smdatarole.getlists(list.get(i). getPkBusiorg(),list.get(i).getPkDataroleclass()); List<Map<String,Object>> arr=new ArrayList<>(); for(int j = 0; j < dto.size(); j++){ Map<String,Object> js = new HashMap<String,Object>(); js.put("id", dto.get(j).getPkDatarole()); js.put("number", (i+1)+"."+(j+1)); arr.add(js); } if( arr.size() > 0 ){ json.put("children", arr); } listarr.add(json); } return listarr; }
代码宽度
书上的种种分析表明,代码的宽度应该在 80-120个字符之间,
但是随着现代液晶显示器的发展,我们的屏幕变得更 ‘逼格’(big),就不用说按照书上来, 你只要觉得你的电脑屏幕容得下,300个字符的宽度也没有问题 .
但是
我个人推荐是 120-200 之间
你的代码有可能在别的地方用到,或者是别人会去欣赏你的代码, 当你的代码格式切换与不同尺寸的屏幕之间, 你能保证自己长长的一条语句能很好的展示么?
所以,还是要限制下宽度
变量的位置
变量在类开始处定义, 可以在靠近变量第一次使用的位置初始化,目的是为了更好的找到, 也是为了对象的’存活’时间更短, 更快被回收
private String address ; //... 冗长的语句过后 address = null; // 在第一使用之前初始化; private void setAddress(){ address = ..... }
作用域
使变量引用局部化:尽可能把对一个变量的引用局部化,将引用点尽可能的集中在一起
让关系”紧密”: 有关系的内容应该在垂直方向上紧密一点,从上往下阅读起来能够容易找到
1 跨度: 衡量一个变量的不同引用点的靠近程度的一种方法是计算该变量的 跨度
2 计算跨度: 相隔多少行,就是多少个跨度; 对一个引用的 跨度的平均值 越小越好,可以提高程序可读性
3 减小跨度 :尽可能缩短变量的"存活"时间 第一条语句 和 最后一条语句的距离行数 ,是变量的存活时间;如果对变量的多次引用靠的非常近,那么相关的代码片段重构为单独的子程序就非常容易; 如何 遵循代码的规范,和满足跨度以及缩短变量的存活时间: 例如:在类开始的地方做声明,但是不做初始化(上面的小节)
减小作用域原则:
- 直到变量即将被使用时再为其赋值
- 将相关语句放到一起
- 将具有相关语句组提炼成单独的子程序
- 开始时采用最严格的可见性,然后根据需要扩展变量的作用域
- 有关缩小变量作用域的说明 : 程序员采用哪种缩小变量作用域的方法,取决于它如何看待”方便性”和”智力上”的可管理性
- 持续性: 数据的使用或变动的持续性
- 绑定时间: 变量和它的值绑定在一起的时间,绑定时间越短越有利(这里和存活时间那一小节差不多)
- 注意: 绑定时间越早,灵活性越差,但是复杂度会降低. 代码越灵活,复杂度越高,那么要靠程序员来平衡两者.
- 为变量制定单一用途
- 每一个变量只用于单一用途:
- 避免让代码具有隐含含义:宁愿用两个变量保存两种信息,带来更多的清晰度,也不要吝惜用的那一点存储空间
- 确保使用了所有已声明的变量
补充
内聚: 内聚性高,意味着类中的方法和变量互相依赖,互相结合成一个逻辑整体,
例如 集合类的数据结构,里面的变量会被多个函数使用到,这就是内聚性高的体现.
关于内聚还是解耦, 就由各位看官去自行取舍了
最后
你可以调整好自己的IDE的快速格式化代码的模板控制
或者去网上找一些能够快速编排代码的工具
- 代码规范 : 格式编排
- 学报编排规范
- HTML5网页编排规范
- JAVA代码格式规范
- CSS规范 - 代码格式
- HTML规范 - 代码格式
- CSS规范 - 代码格式
- HTML规范 - 代码格式
- HTML规范-代码格式
- Android开发代码格式规范
- UCF文件代码格式规范
- 贝格尔编排法代码
- 货币和数字格式编排
- Web技术中心代码规范 - 代码格式
- 循环赛日程编排c代码
- Web 服务 编制与编排规范
- css美化页面,css入门案例,css的代码规范,放置规范,格式规范,代码规范
- 代码格式规范工具 astyle 或 indent
- 儿子说想当个程序员…
- 培训班出身的程序员为什么遭人嫌弃
- bug宝典Python篇 NameError: name 'xx' is not defined
- python中的带参主函数
- linux线程的简单测试(一)
- 代码规范 : 格式编排
- 视频
- 基于web创建逼真的3D图形 | CSS技巧
- (摘自C Primer)千万别解引用未初始化的指针
- Elasticsearch索引迁移的三种方式
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- Linux 关闭tomcat
- Revit二次开发——让窗口一直显示在Revit前面
- C#中的ArrayList集合详解与深度探讨