首页 > 其他分享 >编写可读代码的艺术

编写可读代码的艺术

时间:2024-11-11 22:14:35浏览次数:3  
标签:艺术 变量 作用域 代码 注释 使用 编写 表达式

写让人理解的代码

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

变量名

  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

标签:艺术,变量,作用域,代码,注释,使用,编写,表达式
From: https://blog.csdn.net/weixin_45899700/article/details/143693776

相关文章

  • 使用 J 语言编写文字识别程序
    文字识别的关键在于图像处理和模式匹配。以下将展示如何在J中对字符图像进行基本的特征提取,以实现简单的字符识别功能。环境设置与图像表示首先,在J中将字符图像表示为二维数组,数组中的每个元素表示像素点(0表示黑色,1表示白色):j更多内容访问ttocr.com或联系1436423940ch......
  • Lift, Splat, Shoot, LSS代码详尽分析与解读
    LSS是英伟达在ECCV2020上发表的文章《Lift,Splat,Shoot:EncodingImagesfromArbitraryCameraRigsbyImplicitlyUnprojectingto3D》中提出的一个BEV感知算法,后续很多BEV感知算法如CaDDN、BEVDet都是在LSS的基础上实现的。本文将结合论文和代码详细解读LSS的原理。鸟瞰图......
  • 【Azure Developer】在使用Azure Bot Service JavaScript的实例代码遇见Cannot find m
    问题描述从Github中下载了JavaScript的BotServiceEchoBot实例代码,本地执行,总是报错Cannotfindmodule'node:crypto' 错误信息Error:Cannotfindmodule'node:crypto'Requirestack:atFunction.Module._resolveFilename(internal/modules/cjs/loader.js:902:15)......
  • 《清醒思考的艺术》
    《清醒思考的艺术》的作者罗尔夫·多贝里既是企业家也是作家,他创办了全球知名的商业书摘网站益得书摘,也出版过好几部小说和心理学书籍。丰富的社会经历,加上经济学博士的背景,让多贝里对生活有着敏锐的洞察和思考。他在本书中总结出一系列我们做决定时会跌入的思维陷阱,他把这些陷阱......
  • 代码随想录算法训练营第二十二天| leetcode77. 组合、leetcode216.组合总和III、leetc
    1leetcode77.组合题目链接:77.组合-力扣(LeetCode)文章链接:代码随想录视频链接:带你学透回溯算法-组合问题(对应力扣题目:77.组合)|回溯法精讲!_哔哩哔哩_bilibili思路:开始想循环,感觉行不通,然后看了视频,就嗯理解了一些感觉跟递归的思路确实差不多1.1回溯三部曲回溯的方法首......
  • 平时有使用过AI服务吗——AI人工服务案例助力你了解底层代码逻辑!
    让我们详细说明这个智能客服系统包含的内容,并提供完整的代码示例。我们将涵盖以下几个方面:智能客服(使用Rasa)情感分析(使用HuggingFaceTransformers)自然语言生成(NLG)(使用HuggingFaceTransformers)语音识别(ASR)(使用SpeechRecognition)语音合成(TTS)(使用gTTS)用户行为分析(使用Pandas......
  • python毕设艺术团管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于艺术团管理系统的研究,现有研究主要以通用的社团管理系统为主,专门针对艺术团这一特殊团体的管理系统研究较少。在国内外,社团管理系......
  • 如何使用Flask编写一个网站
    使用Flask编写一个网站是一个相对简单且有趣的过程。Flask是一个用Python编写的轻量级Web应用框架。它易于上手,同时也非常强大,适合构建从简单的博客到复杂的Web应用的各种项目。以下是一个使用Flask编写简单网站的指南,包括代码示例。一、如何使用Flask编写一个网站(一)安装Flask......
  • 使用 Janet 编写一个简单的文字识别程序
    在本文中,我们将使用Janet编写一个基础的光学字符识别(OCR)程序。该程序从图像中提取字符信息并尝试识别出字符。Janet是一种小巧且嵌入式友好的编程语言,适合编写快速高效的脚本。安装Janet和依赖库我们首先需要安装Janet语言及其janet-image库,用于图像处理。可以通过Hom......
  • 编写starrocks的自定义函数
    编写StarRocks的自定义函数前提条件StarRocks使用udf函数需要满足以下条件:安装jdk1.8开启udf功能,在FE的配置文件fe/conf/fe.conf中设置配置项enable_udf为true,并且重启FE节点使配置生效开发使用UDF函数创建maven项目,并且用java实现udf函数创建maven项目并且添加以......