2020-10-27

[如何写优雅的代码]好的代码格式

1.格式的目的

格式关乎沟通,而沟通是代码开发者的头等大事。
好的格式会带来好的阅读体验,使得代码的可读性变高。你今天编写的功能,既有可能在下一版本被修改,即便代码已不复存在,但代码风格和律条却被保存下来。

2.垂直格式

代码在垂直方向上的书写规则可以向报纸学习,一张好的报纸总是会有个头条,告诉你故事的主题,好让你决定是否往下读下去,接下来一段是故事的大纲,给出粗线条概述,接着读下去,故事的细节依次增加。
同理可言,写源文件的思路也是在最顶部给出最高层次概念和算法,细节往下逐渐展开。

概念决定垂直距离

不同概念使用空格隔开,这样读者会在遇到空行时,意识到有思维的变化。

相近概念在垂直距离上靠近,让读者对代码结构“一览无遗”。
回想一下,你是否曾经在某个类里摸索,从一个函数跳到另一个函数,上下求索,想要弄清楚这些函数是如何操作、如何相关,但最终时间和精力都用在找到和记住那些代码碎片。
所以在一个文件里,尽可能使关系密切的概念相互靠近,除非万不得已,不要把概念相近的放置不同文件里。这样做的目的是,当读者对未知部分探索时,会更容易找到自己想要的内容,而不是在不同类和源文件里跳来跳去。

为了让读者更快地找到需要的内容,我们还可以尽可能地遵循以下原则:
1.变量声明尽可能靠近其使用位置。
2.类的变量统一在类顶部声明(取决不同的语言),这可能看似有上一条原则相悖,因为在设计良好的类中,一个类的变量应该会类大多数方法调用,而读者当意识到这个变量属于类时,也会去类顶部去找声明。
3.调用函数时,调用者应该在被调用者的前面。

3.横向格式

一行代码应该有多宽?请尽量保持:无需拖动滚动条到右边的原则,当然近年来随着显示屏越来越宽,程序员又喜欢把显示字符缩小到如此程度,有时屏幕上一行代码甚至能容纳200个字符,但请别那么做,我个人的上限是200。

水平方向上的区隔与靠近

空格除了在垂直方向上作为概念相近的标志,还可以在水平方向上连接和区分关系密切度不一样的事物。

比如,在赋值操作符周围加上空格,以此强调赋值语句两个重要的要素:左右和右边。不在函数名和圆括号之间增加空格,因为函数和参数是密切相关的,而利用空格把参数列表里的参数一一隔开,表示参数是互相隔离的。另外乘法因子两边不加空格是因为乘法具有高优先级,加减因子两边加空格是因为加减法的优先级低。

水平对齐

另外,不用花时间在类变量声明处,做到水平对齐,比如下列例子。因为这会让人关注到不重要的信息,比如,你会从上到下阅读变量名,而不是哪个变量的类型是什么。

public class FitNesseExpediter implements ResponseSender
{
  private    Socket         socket;
  private    InputStream    input;
  private    OutputStream   output;
  private    Request        request;
  private    Response       response; 
  protected  long           requestProgress;
}

缩进

代码需要很强的可阅读性,可以利用缩进凸显代码内部的逻辑结构,好的缩进可以帮助读者概略一份代码时,自动锁定自己关注的结构层级,即排除掉缩进不一样的代码。

大多数的类声明都是在类的顶部,不需要缩进。类中的方法相对该类会缩进一层,方法的实现会相对方法的声明缩进一层,代码块的实现又相对容器代码块的实现缩进一层。

还有一种特别的循环,没有循环体,比如

while (dis.read(buf, 0, readBuffSize) != 1);

分号微乎其微的存在感很容易被人忽略,所以最好把分号单独另写一行。

本文内容属于个人学习笔记,主要信息来源书籍《代码整洁之道》/《Clean Code》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值