编写可读代码的艺术

写让人理解的代码

代码的写法应该使理解代码的人所需要的时间最小化

变量名

  1. 使用专业的词
  2. 避免使用空泛的词
  3. 给变量名带上附加信息
  4. 为作用域更大的变量起一个长的名字
  5. 有目的的使用大小写和下划线

让人不会误解的名字

不会误解的名字是最好的名字————阅读代码的人应该理解你的本意,并且不会有其他的理解

  • 表示上下限:max min
  • 表示包含的范围:first last
  • 表示包含、排除某个范围:begin end

命名一个bool类型的值,应该使用 is 、has这样的词来明确它所表达的含义。避免使用反义词,比如disable。

要小心用户对特定词的期望,例如用户会认为get或者size 是一个轻量的方法。

写代码也需要审美

  1. 如果多个代码块做同样的事,尝试让他们有同样的剪影
  2. 把代码块按照 列 对齐可以让代码更容易阅读
  3. 如果一段代码中用到了A,B,C,那么在使用它们的下方就应该保持顺序一致性
  4. 使用空行将大段的代码分成逻辑上的“段落”

该写什么样的注释?

注释的目的是帮助读代码的人了解作者在写代码时的思想。

什么地方不需要注释

  • 能从代码本身中快速推断的事实
  • 用来装饰垃圾点(比如拗口的方法名),实际上应该把名称修改好

记录你的想法

  • 为什么代码写成这样而不是另一个样子的内在理由(“指导性批注”)
  • 代码中的不足,使用像TODO或者XXX这样的标记
  • 常量背后的意义,为什么是这个值?

在读者的立场思考

  • 预料到代码中哪些部分会让读者说:“哎嘿?什么鬼”给它们加上注释
  • 为小白意料之外的行为加注释
  • 在文件、类级别上使用“全局观”注释来解释所有部分是如何一起工作的
  • 用注释总结代码块, 让读者不会迷茫在细节里

如何写注释

  1. 不管你心里在想什么,先把它记录下来
  2. 读一下这段注释,看看它有什么需要改进的
  3. 不断改进

写言简意赅的注释

  • 当像“这里”和“it”这样的代词可能指代多个事物时,避免使用它们
  • 尽量精确的描述方法行为
  • 在注释中用精心挑选的输入/输出例子进行说明
  • 声明代码的高层次意图,而非明显的细节
  • 用含义丰富的词来使注释更加简洁

简化流程让代码容易阅读

  1. 写一个比较时,把改变的值放在左边,把确定的值放在右边
  2. 可以重新排列if else 代码块,优先处理正确的,简单的逻辑。有时这些准则会冲突,当不冲突时,遵循这些经验法则
  3. 像三目运算符,do while循环经常会导致代码可读性变差,最好不要使用它们,因为总是有更整洁的方式
  4. 嵌套的代码块需要花一些时间去理解,每层新的嵌套都会给读者“思维栈”push一条数据,应该让它们变得“线性”,来避免深层嵌套
  5. 提早返回可以让代码更整洁

拆分又臭又长的表达式

引入“解释变量”代替较长的子表达式,有三个好处

  1. 它把巨大的表达式拆分成一个小段
  2. 通过简单的名字来描述一个子表达式,让代码文档化
  3. 它帮助读者识别代码中重要的概念
    用德摩根定理来操作逻辑表达式

变量与可读性

  1. 减少变量,通过立刻处理结果来消除中介变量
  2. 减少变量作用域,作用域越小越好
  3. 变量只写一次最好,只设置一次的变量会让代码变得更加容易理解

抽取无关的代码

一次只做一件事

把想法变成代码

少写代码

参考

  1. https://www.bilibili.com/video/BV1qs411L7tH/?p=4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/11983.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

优选算法合集————双指针(专题一)

题目一:移动零 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输…

docker基础:搭建centos7(详见B站泷羽sec)

docker的简单学习: sudo apt-get update //这个命令让系统检查有没有新软件 sudo apt-get install docker.io //安装 Docker sudo docker version //查看是否安装成功,显示docker的版本信息 启用Docker 启…

ThreadLocal的熟悉与使用

目录 1.ThreadLocal介绍2.ThreadLocal源码解析2.1 常用方法2.2 结构设计2.3 类图2.4 源码分析2.4.1 set方法分析2.4.2 get方法分析2.4.3 remove方法分析 3.ThreadLocal内存泄漏分析3.1 相关概念3.1.1 内存溢出3.1.2 内存泄漏3.1.3 强引用3.1.4 弱引用 3.2 内存泄漏是否和key使用…

振弦式表面式应变计数据要怎么采集

振弦式表面应变计是一种专门用于测量结构表面应变的传感器,其数据采集过程通常涉及以下步骤: 一、设备准备与连接 设备检查:确保振弦式表面应变计及其相关设备(如MCU自动测量单元、数据传输线等)处于良好工作状态,无损坏或故障。 …

pitest.org使用简介

pitest.org PIT生成的报告是一种易于阅读的格式,结合线路覆盖和变异覆盖信息。 pitest.org官网提供了四种使用方式: Maven快速入门 命令行快速启动 蚂蚁快速启动 Gradle快速启动(外部链接) 我所使用的是Maven的方式进行构建项…

我们所有人际关系的痛苦根源,都源于缺乏边界感

在现实生活里,我们常会遇到这样的情况:对方总是越界,而你又不知如何拒绝,这种不快就会积压在心底。于是,我们可能会想要从其他方面突破对方的界限作为报复,这时关系就会变得紧张。 没有界限的关系容易让人…

JS之正则表达式

一、什么是正则表达式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </…

泷羽sec学习打卡-Windows基础virus

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于windows virus的那些事儿 一、Windows-Virus资源耗尽之无限弹窗cmd-virus测试锁机virus测试无限重启…

【风力发电】基于虚拟惯性控制+一次调频+下垂控制的DFIG双馈风力发电机三机九节点仿真模型

摘要 随着风力发电在电力系统中的渗透率逐渐提高&#xff0c;如何增强风电系统的动态响应能力成为关键问题。本文针对双馈感应发电机(DFIG)&#xff0c;提出一种结合虚拟惯性控制、一次调频和下垂控制的综合控制策略&#xff0c;以改善其在电网扰动条件下的稳定性和频率响应性…

智慧社区可视化解决方案:科技引领社区服务与管理新篇章

随着社会的发展&#xff0c;智慧社区作为新型城镇化发展目标和社区服务体系建设的重要举措&#xff0c;正逐步改变着我们的生活方式。智慧社区通过综合运用现代科学技术&#xff0c;整合区域资源&#xff0c;提升社区治理和服务水平&#xff0c;为居民提供更为便捷、高效、安全…

消息队列高级

目录 消息可靠性 生产者消息确认 第一步&#xff1a;修改application.yml配置文件信息 第二步&#xff1a;定义发送者确认confirm回调方法 第三步&#xff1a;创建消息发送者回执return回调方法&#xff08;确保消息从交换机到消息队列&#xff09; 总结&#xff1a; 消息持…

乐鑫USB方案助力设备互联和数据传输,启明云端乐鑫一级代理商

USB USB 是一种通用的总线标准&#xff0c;用于连接主机和外部设备。 乐鑫 USB 方案为用户提供了方便快捷的设备互联和数据传输方式。乐鑫 SoC 通过将 USB 作为标配外设之一&#xff0c;提供 USB 2.0 OTG 或 USB-Serial-JTAG 接口&#xff0c;支持主机 (Host) 和设备 (Device…

linux详解,基本网络枚举

基本网络枚举 一、基本网络工具 ifconfig ifconfig是一个用于配置和显示网络接口信息的命令行工具。它可以显示网络接口的P地址、子网掩码、MC地址等信息&#xff0c;还可以用于启动、停止或配置网络接口。 ip ip也是用于查看和管理网络接口的命令。 它提供了比ifconfig更…

✬宁波TISAX:✬信息安全管理、✬风险评估与✬数据保护✬的集成宝典✬

&#x1f600;宁波TISAX&#xff1a;&#x1f575;️‍♀️信息安全管理、&#x1f469;‍&#x1f4bb;风险评估与&#x1f937;&#x1f3fb;‍♂️数据保护的集成宝典&#x1f468;&#x1f3fb;‍&#x1f393; &#x1f432;在当今数字化时代&#xff0c;&#x1f4bb;信息…

【软考】系统架构设计师-计算机系统基础(1):计算机硬件

知识点汇总 1、指令集 精简指令集RISC&#xff1a;寄存器&#xff0c;硬布线&#xff0c;效率高&#xff1b;复杂指令集CISC&#xff1a;微程序控制技术&#xff0c;效率低&#xff1b; 2、奇偶校验码&#xff1a;码距是2&#xff08;出错位校验位&#xff09;&#xff0c;只…

关于分治法左右区间单调遍历应该如何设计

阅读以下文章&#xff0c;首先至少要求通过一道分治法的题目或听过一道该类型的讲解。 对于分治的题目&#xff0c;想必你应该知道&#xff0c;通常我们是对于一个区间拆分两个部分&#xff0c;而最小子问题通常是只包含一个元素的区间数组。为了后续方便处理更大范围的区间&am…

Mybatis的分页插件的使用方式

插件介绍: 使用mabatis中一个名为PageHelper的插件,会把我们后面的一条SQL进行一个动态的拼接,通过拦截器对sql动态的添加limit,从而实现分页的效果 使用方式: 1.先导入相关的依赖 2.在项目中的Mapper层中对应的Mapper.xml中写动态SQL 3.在项目中的Serviceimpl层通过PageHel…

计算机信息处理技术

信息技术基础知识 数据和信息 数据 “数据是对事实、概念或指令的一种特殊表达形式&#xff0c;这种特殊表达形式可以用人工的方式或者用自动化的装置进行通信&#xff0c;翻译转换或者进行加工处理。”根据这个定义&#xff0c;数字、文字、图形、图像、声音等都是数据。数…

基于Python的膳食健康系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

Kafka面试题(三)

1、kafka是如何做到高效读写 1&#xff09;Kafka 本身是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高。 2&#xff09;读数据采用稀疏索引&#xff0c;可以快速定位要消费的数据。&#xff08;mysql中索引多了之后&#xff0c;写入速度就慢了&#xff09;。 …