少年,快修改你的代码吧!

《代码整洁之道》小结

一.有意义的命名

1.一旦发现有好名称,就替换掉旧的

一个名称要代表一系列含义,他的作用是什么,表示什么,什么类型

2.使用可搜索得名称

3.有问题的名称:单字母名称和数字产量 的问题在于,很难搜索定位到位置

4.好的名称:MAX_CLASSES_PER_STUDENT 比数字7好多了

5.长名称胜于短名称

6.减少*命名前缀*,比如m_

7.类名:名称短语

8.函数名:动词短语

最好 重复去修改 旧的名称,总结自己的命名习惯

二.函数

1.第一规则是要短小,第二规则是更短小

代码库和缩进,if,eles while语句等中的代码块应该只有一行,

改行大抵是一个函数调用语句。 既短小,又因为函数名称有很高的描述性而可读。

2.只做一件事

3.使用描述性的名称

好处是有利于你理清关于模块的设计思路,利于优化修改。

使用与模块名一脉相承的短语,名词,动词 来给它们命名。

例如

includeSetupAndTeardownPages

includeSetupPages

includeSuiteSetupPage

includeSetupPage等,这些名称使用了类似的修辞,依序讲了一个故事

使我不断思考,那么是否会有includeXX?

4.最重要的:函数参数

最理想的参数数量是零,第二优先的是单个参数

事实上,在单个参数会被多次使用时,可以把改参数封装到一个函数中,
这也是提升为零参参数的号方法

—-《重构》

5.参数对象,举个例子大家很容易明白

Circle makeCircle(double x, double y,double radius);

提升为

Circle makeCircle(Point center,double radius);

有意义的Point 可以取代 x 和y的意义,更可读

6.最想提问的

如何写?

写代码和写小情书一样,先想写什么就写什么,然后再慢慢打磨它,需要仔细推敲,才能直达姑娘的内心,打动自己和别人
—by 杨超凡

三.格式

大师级的程序员把程序当做讲故事,而不是写程序,

优秀的函数层级,都是在向读者讲述自己那个小天地的古树。

函数,必须干净利落地拼装到一起。

帮助你讲故事。

1.垂直格式

变量 声明靠近使用它的地方,

本地变量靠近使用它的函数

成员变量在类的顶部声明

如果某个函数调用了另外一个, 就应该让他们俩在一起,并且尽可能把调用者 放在上面

2.学会缩进, 记住 IDE格式化的快捷键更好 ctrl+shift+F

四.数据、对象的反对称性

这一章节让人读之愈有趣味

初读此段,甚是费解,反复看后面解释,越来越佩服作者的优化艺术。

数据设置为私有,是我们不想其他人依赖这些变量。

为什么仍有那么多程序员给私有变量添加赋值器和取值器,将私有变量公之于众,如同它们根本就是公共变量一般呢?

1.数据抽象

作者举例
6-1
public class Point {
    public double x;
    public double y;
}
6-2
public interface Point {
    double getX{};
    double getY{};
    void setCartesian(double x,double y);
    double getR();
    double getTheta();
    void setPolar(double r,double theta);
}

先抛结论:其中之一暴露了实现,另一个则完全隐藏了实现

思考两分钟,确实是这么回事。

6-2漂亮,就漂亮在 展现了一种数据结构,即是一种坐标系点的关系函数
而且还固定了一套存取策略。
6-1 则稍微丑陋,即使变量私有,我们也可以通过set get使用变量,其实现仍然暴露了

重点来了

隐藏实现 并非只是在变量之间放上一个函数层 那么简单。 隐藏实现关乎抽象!

类并不简单得用取值器和赋值器 将其变量推向外部,而是 暴露抽象接口,以便用户无需了解数据的实现就能操作数据。

傻乐呵的乱加取值器和赋值器是最坏的选择

德墨特尔律

模块不应该了解它所操作的对象内部情形, 应该隐藏数据,暴露操作。

遗留几个观点和例子【需要反复读】

此外作者举出剩下的几个例子 我还在仔细复读中,有新收获再来补充。

遗留有趣得章节 P269 <味道与启发>tips

   1.函数避免过多的参数,尽量向零参或者少参的情况靠拢

   2.函数输出参数得情况值得考虑,读者期望参数用于输入而非输出,如果 函数非要修改什么东西得状态,就修改它所在对象的状态吧!

   3.函数避免输入布尔值参数,它们令人困惑

   4.“重复”这种现象的发生,都代表遗漏了抽象。重复的代码可以成为子程序或者干脆成为一个类

   5.错误的抽象层级上的代码,不容易被发现。所有较低层级概念放在派生类中,所有较高层级概念放在基类中。
   tips:5.1 只与细节实现有关的常量、变量或工具函数不应再基类中出现。

   6.理解算法: 好多代码的出现,是因为人们没有花时间去理解算法。他们硬塞进足够多的if语句和标示,从不真正停下来考虑发生了什么,勉强让系统能工作。

    编程常常是一种探险,你以为自己知道某事的正确算法,然后拉起袖子瞎干一气,搞到程序“可以工作为止”,你怎么知道它“可以正常工作”?

    在你认为完成某个函数之前,确认 理解了它是怎么工作得,还必须知道解决方案是正确的。

    获得这种知识的最好途径,往往是重构函数。学会某种整洁而足具有表达力,清楚呈示如何工作得东西。

你可能感兴趣的:(重构,函数)