[如何写优雅的代码]好的代码格式
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》