代码整洁之道1-6章总结

2023-11-18

第一章 整洁代码

总的来说就是,整洁的代码有益于团队的测试开发,往大了说会影响公司的发展。作者列举了几个公司的反面教材,由于代码不够整洁,无法继续维护,导致公司倒闭的情况(迭代周期越来越长),所以说作为一个程序员,都有义务和责任去尽量写出简洁优美的代码!

本书的作者是总结了多位大咖几十年来的开发经验,这很难得,但同时他也指出,并非所有人都同意这些简洁之道,甚至强烈反对其中的一些建议,但我们最终还是要吸收其精华,无论是否真的运用到代码当中。

其中,作者做个了一个有趣的调查就是,通常我们认为自己写代码的时间很长,而其实我们写代码和读之前的代码的时间比例是1:10,这也要求了我们要写出整洁的代码,以便我们更快的完成需求。

 

第二章 有意义的命名

这一章是对各种命名规则的一个建议,其中我总结出了几个最常用也是最重要的几条原则:

1、名副其实

指的是我们的名字要尽量贴合其要代表的意思,而非仅仅list、array这样简单的名称,每当发现有更好的名字可以替换之前的名字时候,可以毫不犹豫的去替换,因为现在的编译器和帮助你顺利完成,而这可以帮助你更好的体会变量的含义。

2、做有意义的区分

主要指不要在相似的命名中做无意义的区分,可以增大区分的程度,例如我就总爱用name1、name2。。。等等来命名不同的名字,而这是不正确的,要明确每个名字的含义来命名,其实也属于第一条的范畴。

 

3、使用领域相关的名称

大家都是程序员,没必要为了别人通俗易懂来命名,完全可以用专业术语来命名。

 

4、使用可搜索的名称

作者认为单字母名称仅用于短方法中的本地变量。而名称的长短与其作用域大小相对应,也就说不要怕取长名字,只要符合上面的要求,那么就是好名字。同时作者指出,好的整洁代码就如同读文章一样,看到名字就知道在干什么。这也与后面的注释那一章遥相呼应。

5、使用描述性的名称

这是第三章写函数名称的,但我将它归类到这。其实也适用于参数、变量等命名。其目的和第四条相似,让读者见其名知其意。

 

第三章 函数

 

1、短小

函数一定要小,然后要更小(一个函数的最多不要超过20行!)。这点深有体会,因为刚入职学习现有的项目,发现越短小的函数越容易理解(即使多次跳转),反而那些长达几百行的函数看着就没有食欲!!!!尤其是if..else嵌套语句,如果超过三层就会让人头晕,没有看下去的欲望。这一点作者也做个严格的限制就是,这些嵌套语句不应该多于一层(个人感觉太严格了,2层嵌套还是有必要的)并且嵌套也不该有长篇大论(这一点我觉得也好严苛啊!!!),这些嵌套里面通常只是一个函数的调用。

 

2、只做一件事

这一点很好理解,就是一个函数不应该完成许多事情,这个和命名规则相互联系,就是(一件事+一个名副其实的名字)来完成一个短小的函数。判断函数是否只做了一件事,看在函数中能否再提炼出一个新的函数,该函数不仅仅是单纯地重新诠释其实现。每一个函数都完成一个抽象层级,就是代表着在完成一件事(自己体会)。。。。

3、消灭重复代码

我经常犯的错误,将短小而重复代码直接复制粘贴。虽然现在一时爽,维护的时候就是火葬场,因为不知不觉就会不断扩大复制的代码,而把原有的结构变得臃肿复杂。所以即使在短小的重复代码也要消灭掉。

4、无副作用

其实这一点很难,说直白点就是不要函数有耦合,这个在整个规划时候就要规划后,如果没有规划后期很难避免。

5、使用异常代替返回错误码

这条不用多说了,正常开发没有用错误代码的了吧。注意一点就是将try/catch块也要抽离出来,避免函数过长,同时异常处理函数也要满足上面的规则,只完成一件事。

6、参数要少

这一点作者要求的也很严格,竟然把三个形参作为最多的情况。不过的确参数越多,越难理解函数的意图(我接手的代码竟然有10几个参数的函数,简直崩溃)

 

第四章 注释

这一章其实我挺不赞同,的确好的注释是越少越好,但只限于好的代码前提下。对于新手以及没有好的习惯的程序员来说,我觉得注释是帮助自己完善代码的好方式(尤其是代码没完成时候,注释可以帮助自己记录自己的思路)

我刚入职的时候,接手的项目注释就非常少,而代码又不是如作者那样写的整洁(虽然开发人员已经认为整洁了,但仍然有好几层的嵌套和重复逻辑,甚至200多行的函数)。所以对于这样的项目,注释多点感觉不为过,相反没有注释又没有整洁的代码,简直就是灾难,完全靠猜。

一、注释要少

要用代码阐述,而不是注释。

二、坏注释

注释不需要喃喃自语(就是自己写给自己的话),和无意义的注释(一眼看出来的语句就不要注释)。同时作者不赞同在函数头前增加函数说明和参数说明,我觉得是有异议的,这一点是在满足前面命名规则和函数规则的条件下,才可实现,如果一个函数名称起的不好,而参数又非常多,那么函数的函数头注释就非常有必要。

三、好注释

作者认为,注释只有少数情况才会被添加,包括法律信息、提供信息的注释、不好理解的算法、警告、TODO注释(将来要修改或添加的提示)。如果按照这些写注释,那么注释真的会很少!

 

第五章 格式

这一章写过代码基本都有体会了,横向竖向都有一定的缩进和留白(是不是和国画很像呢!),而且现代编辑器也会帮助你完成许多工作。作者指出,每一行的代码不要超出屏幕,就是不要拖动横向的滚动条来看代码,同时要缩短每行的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码整洁之道1-6章总结 的相关文章

  • 什么是区块链概念

    区块链到底有什么价值 区块链技术被称为价值互联网 大体上原因在于它解决了原有互联网的三个基本问题 第一 区块链通过在数字货币领域的应用 提供了资金流 或者叫资本流 信息在互联网的流动的解决方案 第二 区块链通过加密和分布式账本的引用 解决了
  • 关于Visual Studio 不支持x64 内联汇编分析

    记录一下今天的大坑 实在是有必要记录一下 调程序发现参数在函数传递时 出现了异常的值 已经确认不是指针破坏的问题 用汇编看了下 发现汇编寄存器地址都取错了 在release开启o2优化时出现 关掉又正常 实在是百思不得其解 对于内联汇编 其
  • Mysql根据拼音首字母分组和排序

    最近业务上有个需求 需要根据英文字母展示对应的人名 和我们手机的通讯录差不多 如下图所示 通常如果表设计的时候增加了对应的首字母字段应该很好实现 那如果没加 应该怎么实现呢 图示Sql SELECT name ELT INTERVAL CO
  • Java FileOutputStream类

    文章目录 总结 FileOutputStream类数据结构 FileOutputStream类方法 构造方法 操作方法 总结 FileOutputStream类用于将数据写入文件或文件描述符的输出流 FileOutputStream用于写入
  • 如何查看局域网内所有IP

    要如何查看局域网内正在使用的电脑的IP一共分以下几个步骤 第一步 点击电脑左下角的 开始 然后再点击 运行 第二步 在运行窗口里填入 cmd 然后点击确定 第三步 在cmd命令窗口输入 ipconfig ALL 命令 点击键盘上的回车键 第
  • 2021年字节跳动+京东+美团面试总结!内含福利

    开篇 说一下我大概的情况 渣本毕业 工作已经有快3年了 从高中就开始玩小破站 无论是学习还是日常放松都是在b站 大学主学的软件技术专业 所以 入职bilibili是我大学时期给自己定的小目标 在学校 专业学的算中上的水平 课本知识和老师讲的
  • delphi with do和for do语句

    1 with 对象名 do语句只是为了减少输入的字符 不必每次重复名字 直接写变量 procedure TForm1 Button1Click Sender TObject 正常写法beginedit1 text hello edit1 c
  • J1939协议与CAN2.0对应关系

随机推荐

  • python贪吃蛇小游戏,面向对象设计模式,附带源码以及所需素材

    在python中通过面向对象设计模式来实现一个贪吃蛇小游戏 源码在最下方 上传的资源包内也包括代码源文件以及所需素材等 源文件在game文件夹内 exe文件可直接运行 pygame模块需要自行下载 先来看运行效果图 开始界面 点击按钮开始游
  • Leetcode 括号的分数 -- 栈

    题目描述 leetcode 856 括号的分数 给定一个平衡括号字符串 S 按下述规则计算该字符串的分数 得 1 分 AB 得 A B 分 其中 A 和 B 是平衡括号字符串 A 得 2 A 分 其中 A 是平衡括号字符串 示例 1 输入
  • Go语言学习18-基准测试

    基准测试 引言 基准测试 1 编写基准测试函数 2 计时器 3 内存分配统计 4 基准测试的运行 结语 引言 所谓基准测试 Benchmark Test 简称BMT 是指 通过一些科学的手段实现对一类测试对象的某项性能指标进行可测量 可重复
  • 嵌入式 Linux 入门(七、Linux 下的环境变量)

    嵌入式 Linux 入门第七课 学习理解 linux 的环境变量 矜辰所致 前言 学习完 Linux 的 Shell 命令 和 Shell 脚本 我们还需要理解一个东西 环境变量 理解了 Linux 的环境变量 前面的文章中有些细节的东西
  • OpenCASCADE:使用C#演示的实例

    OpenCASCADE 使用C 演示的实例 OpenCASCADE是一个开源的三维几何建模软件库 它支持多种语言接口 其中 OCCT是OpenCASCADE的C 语言封装 而在本文中 我们将介绍如何使用C 语言来调用OCCT的API 在Vi
  • Mac安装SecureCRT

    踩了很多坑 主要过程 第一次 在之前常用的一个mac软件福利网站https xclient info s securecrt html下载之后发现没有破解文件securecrt mac crack pl 第二次 在csdn上模仿下载之后进行
  • SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else

    场景 设计模式 策略模式在Java中的使用示例 设计模式 策略模式在Java中的使用示例 java 策略模式示例 霸道流氓气质的博客 CSDN博客 上面讲了策略模式在Java中的使用示例 下面看一个在SpringBoot中的实际使用示例 业
  • 实时监听EditText内容变化,修改监听软键盘

    主要是addTextChangedListener方法的使用 aswerEdittext addTextChangedListener new TextWatcher 编辑框的内容发生改变之前的回调方法 Override public vo
  • 浅谈设计原则

    1单一职责原则 什么是单一职责原则 在我理解看来就是一个东西如果发生问题那么就有且仅有一个原因导致它发生问题 它的准确解释就是 就一个类而言 应该仅有一个引起它变化的原因 如果一个类承担的职责过多 就等于耦合度加大 当变化发生时 设计会受到
  • JAVA-1001. 害死人不偿命的(3n+1)猜想

    卡拉兹 Callatz 猜想 对任何一个自然数n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到n 1 卡拉兹在1950年的世界数学家大会上公布了这个猜想 传说当时耶鲁大学
  • CentOS安装指定版本的Docker(包括卸载)

    一 Docker安装 1 配置指定的yum源 wget P etc yum repos d https mirrors aliyun com docker ce linux centos docker ce repo 2 查看yum源支持的
  • React使用antd里面的Table组件,表格可自由控制列宽

    import React Component from react import Resizable from react resizable import react resizable css styles css 要引入样式 impo
  • 到底学机械好还是学计算机好,大学同学一个选择学机械,另一个学计算机,对比5年后收入蒙了...

    原标题 大学同学一个选择学机械 另一个学计算机 对比5年后收入蒙了 现如今上大学 你所选择的专业对以后的职业规划还是有挺大的影响 而互联网可以说是这些年最热门的专业 所以很多大学生选择学计算机还是挺多的 基本上计算机系的大学生也是最多的 而
  • 腾讯云存储COS

    简介 对象存储 Cloud Object Storage COS 是由腾讯云推出的无目录层次结构 无数据格式限制 可容纳海量数据且支持 HTTP HTTPS 协议访问的分布式存储服务 腾讯云 COS 的存储桶空间无容量上限 无需分区管理 适
  • 低功耗蓝牙(BLE)你入门了吗

    前言 蓝牙低功耗 Bluetooth Low Energy 或称Bluetooth LE BLE 旧商标Bluetooth Smart 用于医疗保健 运动健身 安防 工业控制 家庭娱乐等领域 在如今的物联网时代下大放异彩 扮演者重要一环 是
  • Linux中断处理程序框架

    设备的中断会打断内核进程的正常调度和运行 系统对更高吞吐率的追求势必要求中断服务程序尽量短小精悍 但是 这个良好的愿望往往与现实不吻合 在多数真实的系统中 当中断到来时 要完成的工作往往并不是短小的 它可能要进行大量的耗时处理 为了在中断执
  • Bash中各种括号

    Bash中有各种括号 包括单小括号 双小括号 单中括号 双中括号 单大括号 而且它们之间很容易混淆 所以很有必要总结一下它们的用法 1 的用法 单个小括号用来创建一个子shell 例如 pwd home xfeng cd tmp pwd t
  • matlab智能算法之模拟退火算法

    智能算法之模拟退火算法 1 起源 2 物理退火流程 2 1 加温过程 2 2 等温过程 2 3 冷却过程 2 4 组合优化与物理退化 3 原理 3 1 算法核心迭代 3 2 具体流程 4 案例 4 1 求解n元函数的极小值 4 2 求解二元
  • Java 多线程编程

    Java给多线程编程提供了内置的支持 一个多线程程序包含两个或多个能并发运行的部分 程序的每一部分都称作一个线程 并且每个线程定义了一个独立的执行路径 多线程是多任务的一种特别的形式 但多线程使用了更小的资源开销 这里定义和线程相关的另一个
  • 代码整洁之道1-6章总结

    第一章 整洁代码 总的来说就是 整洁的代码有益于团队的测试开发 往大了说会影响公司的发展 作者列举了几个公司的反面教材 由于代码不够整洁 无法继续维护 导致公司倒闭的情况 迭代周期越来越长 所以说作为一个程序员 都有义务和责任去尽量写出简洁