读书笔记-干净代码

前言

这篇博文是我自己的一点读书笔记。 本篇文章仅适合人类阅读,外星人请绕路。

这本书改变了我的人生,书名叫 Clean Codes ,翻译过来应是干净代码吧。以前以为代码要怎么酷炫怎么写,要把代码挤到一行,用一些不为人知的函数,做一些很简单的工作。 工作了以后才知道,谁没事干写斐波那契数列, 算大O, 大 Theta,写两极树。 生产所用的工具,都已经将这些概念具象化了。我们所要的,是如何让不同的人类和谐地工作在一起,写出最连贯最统一的代码,而且要是日后可以继续维护,继续增加功能的代码。

很多年前,我们都说 Scale Up, 也就是向上扩大, 跟修楼一样,就是使劲往软件里面同一个区域加代码,需要什么加什么,但是楼建的太高会垮,而且你需要去修复的时候,要爬上爬下,不小心还会弄垮一整座楼。但是,基础单一,顺着楼梯往下走,就能看懂代码在做什么, 但是也没有弹性。 现在业界偏向于卧向扩大,在同一个代码基础上,加模块,加类,根据需要,可以随时热插拔, 弹性十足。听起来挺美好的,但是如果多个人在同一个代码基础上,你写你的,我写我的,那么想要去理解,或者修改代码就要出问题。因为你无法理解另外一个人脑子在想什么, 他写这些函数的意义是什么,他喜欢如何写代码等等。当你需要参考多个模块的时候,这个问题变得尤其严峻。所以, 你经常会看到有人这么说: Write this [JS图标] , not this ? 。

什么代码干净

所谓干净代码,就是没有累赘的,可以让人看得懂的代码。 这里举个例子:


function a ($b) {
    return json_encode($b['content']);
}

以上是不干净的代码,因为你一眼看去,完全不知道他应该干嘛,以下给两个干净例子:


function getContentJson($payload) {
    return json_encode($payload['content']);
}

function getNeiRongJson($huoWu) {
    return json_encode($huoWu['neiRong']);
}

英文好的,自然写英文最自然,不过中文可以用拼音代替 (如果你的团队都是会中文的) 。 函数名字上面交代的很清楚,这个是做 GET 也就是取读工作的 ( save 或者 Write 是做写的工作的), Json 说明函数回复的是 Json , 然后还有写了谓语, 也就是 内容 (Content), 主谓宾集合。 这个叫做描述化命名 , 是为了让人类看一眼就知道这个函数是做什么的,处理什么的, 输出什么的。

我总结了一下,干净代码有这么几个特点:

  1. 有意义的命名。 可以写 $neiRong, $content, $neiRongWithJson 为什么要写 $nr, $ctnDers, $nr_json_yiqi 。 我们写代码的时候老是觉得是给机器读的,命名如何无所谓。但是当你回过头来看你自己写的东西的时候,你就知道你有多么想敲当初的自己,看了半天还是没想起来怎么这么写。
  2. 无注释。这个是我自己比较起来,最好的方法。 因为注释你需要一只去更新它, 你稍微不注意, 没有更新, 注释就变得无用,甚至还会误导。 这个理论的关键就在于你命名代码的能力,如果你一切函数,类和代码都是可以当文字读出来的, 那么代码本身就可以自己注释自己了。 给个例子 (写的不完美,别介), 你们看例子是做什么的?

    class RenLeiTongZhiController {
    public $jiQiRen;
    
    public function tongZhiRenLei (Ren $renLei) : JiQiRen {
        $cleanDeRenLei = $this->cleanRenLei( $renLei); 
    
        $this->deployJiQiRen (); 
    
        $this->jiQiRenTakeOver(); 
    
        return $this->jiQiRen;
    }
    }

    我知道拼音并不是完美的英文替代方案,但是用中英参杂的方式,应该是可以做到很高的阅读性的。用英文中常用的 With, And, Or 作为介词或者主语,这样就可以把拼音分割开来了,做到很高的阅读性。 这样不论是谁下次改代码的时候,就知道改哪里,改什么。

  3. 少点套路,多点真诚, 简单最美。 我每次写代码的时候,都要再看一遍,能不能写得再简单一点。代码写的越简单越好, 你觉得复杂了,就得把代码拆分开来。 很多公司要求你的函数最多不能超过10行,我没那么严格,我说最多不能超过50行。因为一个函数里面东西多了,就会开始变得很杂。杂乱的代码跟扭成麻花的耳机线一样令人心烦。人类的临时储存脑容量是有限的, 一个函数里面东西太多,就会产生内存溢出的现象,你就忘了你最开始写的是什么。 还有一个问题,就是代码回收再利用, 你写一个100行的函数,里面肯定有个十行十五行是其他地方也要用的,但是你拿不出来啊,拿不出来怎么办,那就只好 Ctrl+C , Ctrl+V 。那以后要修改怎么办?那就要记住自己用过的地方,一个个地改。那以后继任的人不知道怎么办? 那你要记得,想想你的后任是一个知道你在哪里住的跟踪暴躁狂 (出自软件驱魔这本书)。。。

后记

以上所说的,可能你觉得,就是作者懒,要省时间。但是你也想想,你如果能和团队更高效地工作,是不是就不用加那么多班了, 是不是可以用多出来的时候回家吃晚饭,陪陪伴侣,家人还有孩子? 而且是不是能够让维护更加轻松, 以后老板在半夜三点或者旅游的时候告诉你出了个Bug, 你可以很容易找到症结点,改好,喝口水,继续嗨。 所以某位大大说过, 编程谁都能编,但是写人类看得懂的代码的不多。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Software Engineer Practices above all 软件开发标准高于一切
Shuyi
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!