代码规范 : 格式编排

来源:互联网 发布: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  减小跨度 :尽可能缩短变量的"存活"时间   第一条语句 和 最后一条语句的距离行数 ,是变量的存活时间;如果对变量的多次引用靠的非常近,那么相关的代码片段重构为单独的子程序就非常容易;   如何 遵循代码的规范,和满足跨度以及缩短变量的存活时间:   例如:在类开始的地方做声明,但是不做初始化(上面的小节)

减小作用域原则:

  1. 直到变量即将被使用时再为其赋值
  2. 将相关语句放到一起
  3. 将具有相关语句组提炼成单独的子程序
  4. 开始时采用最严格的可见性,然后根据需要扩展变量的作用域
    • 有关缩小变量作用域的说明 : 程序员采用哪种缩小变量作用域的方法,取决于它如何看待”方便性”和”智力上”的可管理性
  5. 持续性: 数据的使用或变动的持续性
  6. 绑定时间: 变量和它的值绑定在一起的时间,绑定时间越短越有利(这里和存活时间那一小节差不多)
    • 注意: 绑定时间越早,灵活性越差,但是复杂度会降低. 代码越灵活,复杂度越高,那么要靠程序员来平衡两者.
  7. 为变量制定单一用途
    • 每一个变量只用于单一用途:
    • 避免让代码具有隐含含义:宁愿用两个变量保存两种信息,带来更多的清晰度,也不要吝惜用的那一点存储空间
    • 确保使用了所有已声明的变量

补充

内聚: 内聚性高,意味着类中的方法和变量互相依赖,互相结合成一个逻辑整体,
例如 集合类的数据结构,里面的变量会被多个函数使用到,这就是内聚性高的体现.
关于内聚还是解耦, 就由各位看官去自行取舍了


最后

你可以调整好自己的IDE的快速格式化代码的模板控制
或者去网上找一些能够快速编排代码的工具

原创粉丝点击