0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何编写可读性代码

张康康 2019-08-16 18:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

编写可读性代码


作者:极链科技 汤红燕

什么叫可读性代码?

简单来说,就是易于理解、耗脑时间少、可维护性较高的代码。

编写可读性代码

把信息装到名字里(一个好的名字可以承载很多信息)

1. 选择专业的词(避免“空洞”)

比如函数 getUserInfo( ) 是用来获取用户信息,但是,是从接口中获取的信息呢?还是在页面已经暴露的信息?看到的时候就会有疑问。

命名的时候,如果是从互联网中获得,可以使用fetchUserInfo( )来表示。

2. 找到更有表现力的词(更清晰、精确)

比如:search 和 find 区别 ,再可以类似于表格数据的筛选, 可以考虑用更准确的词汇去表示。

9442a3755ac247069a2879da26566215.png

避免使用像 tmp 和 retval 这样泛泛的名字。

3. 使用具体的名字更细致地描述事物

对于一个变量包含十六进制字符串,命名为 let id,但是为何不命名成 let hex_id?

如果你的变量时一个度量值的话,最好让名字带上它的单位。

4. 名字应该有多长

在编写代码取名的时候总会有一些疑问,我的定义名称该多长才合适?可以遵循以下几点:

l 小作用域里可以使用短的名字;

l 首字母缩略词和缩写(当然是在成员能看懂的情况下 TBColor -> TextBackgroundColor);

l 丢掉没用的词(no-padding-all -> no-padding);

l 利用名字的格式来传递含义(比如所有的class 是class-name, id 是 id_id);

不会让人误解的名字

常用的 filter() 命名,如果新同学看到,可能会产生疑问,这是过滤掉满足要求的值呢还是不满足要求的?

为了便于处理以上情况,有以下几点建议:

l 使用 min 和 max 来表示(包含)极限

l 使用 first 和 last 来表示包含的范围

l 使用 begin 和 end 来表示包含/排除范围

l 给布尔值命名

对于语句 bool read_password = true 是我们已经读取密码,还是我们需要读取密码?

这时候可以用 need_password 或 user_is_authenticated 这样的名字来代替;

像 is 、has 、can或should这样的词,就可以把布尔值变得更明确。

审美

代码的审美,确切地说,有三条原则:

1. 使用一致的布局,让读者很快就习惯这种风格。

2. 让相似的代码看上去相似。

3. 把相关的代码行分组,形成代码块。

该写怎样的注释

1. 从代码本身快速推断出事实的不需要注释

2. 不要为了注释而注释

3. 不要给不好的名字加注释(不如改名字)

4. 加入“导演评论”,你可以在代码中加入注释来记录你对代码有价值的见解。

5. 为代码中的瑕疵写注释

b2e97cee7cd1459086c5b06654154d9f.png

6. 给常量加注释(有些常量不需要注释,因为它们的名字已经很清楚,但很多常量可以通过加注释得以改进)

7. 站在读者的角度,“全局观”注释

e847d704d9574e7b836ab5fa202b9ef9.png

写出言简意赅的注释

1. 让注释保持紧凑

2. 避免使用不明确的代词(如it,this等)

3. 润色粗糙的句子

4. 精确地描述函数的行为

比如用输入/输出例子来说明特别的情况

下面是一个用来移除部分字符串的通用函数:

248217c7228d4cb5b35e3bdaa7d95619.png

5. 声明代码的意图

对于“具名函数参数”的注释,就是像 C# Python 这类语言的命名函数参数,让每个参数的意义更加明确。

比如:

e7090c398a35419b852febc7a4436cbb.png

6. 采用信息含量高的词

l 避免使用代词

l 尽量精确描述函数的行为

l 精心挑选输入/输出的例子

l 声明代码的高层次意图,而非明显的细节

l 用嵌入注释解释难以理解的函数参数

l 用含义丰富的词语

简化循环和逻辑

1. 把控制流变得易读

l 条件语句中参数的顺序

比较左侧: “被询问”的表达式,它的值倾向于不断变化

比较右侧: 用来做比较的表达式,它的值更倾向于常量

l if/else 语句块的顺序

首先处理正逻辑而不是负逻辑

再处理简单的情况

最后处理有趣的或者是可疑的情况

l ?: 表达式, 只有在简单的情况下使用

l 避免 do/while 循环

l 从函数中提前返回

l 最小化嵌套

l 减少循环内嵌套

2. 拆分超长表达式

l 用做解释的变量

c8c164cedcb64b88b4eb5d32dc4d902f.png

l 总结变量(用一个短很多的名字来代替一大块代码,这就是总结变量)

l 拆分巨大的语句

比如:

a29c9a62cd6e4ccca8a110e99b13a356.png

显而易见,这段代码逻辑很清晰,但是看着太复杂,下面改掉:

436ad7f8528741d681bbfce62de1bbad.png

这样做有很多好处:

- 避免输入的错误。

- 缩短了行的宽度,更容易快速阅读。

- 如果类名字改变了,只需要改变一个地方就行了。

3. 变量与可读性

l 减少变量,即那些妨碍的变量。通过离开处理结果来消除“中间结果”的变量。

l 减少每个变量的作用域,越小越好。

l 只写一次的变量更好,那些只设置一次值的变量(或者 const 、final 、常量)使得代码更容易理解。

4. 抽取不相关的子问题

l 积极地发现并抽取不相关的子逻辑:

- 看看某个函数或代码块,问问自己:这段代码的高层次的目标是什么?

- 对于每一行代码,问下:它是为了目标而写的么?

- 如果足够的行数在解决不相关的子问题,试图抽取代码到独立函数中。

l 纯工具代码(封装共用的函数)

l 其他多用途代码(比如页面上数据逻辑代码)

l 创建大量通用代码(组件)

- 通用代码很好,因为“完全地从项目的其他部分中解耦出来”。

l 项目专有的功能(私有组件)

l 简化已有接口,按需重塑接口

5. 一次只做一件事

应该把代码组织得一次只做一件事情。如何给代码整理碎片,下图演示了这个过程:

8bcf6a42bfdf444fb2d5be2e5c407d91.png

6. 把想法变成代码

如果有好的想法,则可以实现为代码,但需要注意以下几点:

l 清楚地描述逻辑

l 可了解相关函数库,以便减少代码量

l 把这个方法应用于更大的问题

l 用自然语言描述解决方案

l 递归地使用这种方法

7. 少写代码

“最好读的代码就是没有代码”,在收到一个需求的时候,要质疑和拆分你的需求,用小的代码库,去替代大的代码库;删除没有用的代码,简化实现过程;熟悉你周边的库,了解最优库;对于一些库的重用,可以极大的节省时间。

总结

以上就是关于可读性代码的建议和实现方式,好的代码不仅阅读轻松,维护起来也是事半功倍。养成好的书写处理习惯,会为我们的工作和学习带来极大的便利。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言的编程技巧

    代码的灵活性和可维护。 ‌6、使用合适的条件语句‌:选择合适的条件语句(如if、else if、else、switch)可以提高程序的执行效率和可读性。‌ ‌7、模块化和分层开发‌:采用模块化
    发表于 11-27 06:46

    HarmonyOS应用代码混淆技术方案

    代码混淆技术可以增加代码的复杂和模糊,从而提高攻击者分析代码的难度。
    的头像 发表于 11-21 16:17 5333次阅读
    HarmonyOS应用<b class='flag-5'>代码</b>混淆技术方案

    汇编语言的起源

    (opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。 对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔
    发表于 11-20 07:19

    HarmonyOSAI编程编辑区代码生成

    CodeGenie提供Inline Edit能力,支持在编辑窗口中通过自然语言进行问答,基于上下文智能生成代码片段,提升代码可读性。 当前有以下两种方式唤醒Inline Edit对话框: 在
    发表于 08-20 15:24

    RTOS SDK的canmv_net_mgmt网络模块如何编写连接代码

    从最近源码更新了一次后,以前的可执行文件使用出错了,请问有没有大哥知道新一版源码怎么编写代码进行操作网络模块canmv_net_mgmt。 或者是操作canmv_net_mgmt的头文件都是哪些,可以参考些什么
    发表于 07-25 08:14

    深入理解C语言:函数—编程中的“积木块”艺术

    键问题:1.避免重复:将重复代码封装成函数,实现“一处修改,全局生效”,让维护更高效。2.逻辑清晰:每个函数专注一个特定任务(如计算、显示等),代码可读性大幅提升。3.
    的头像 发表于 06-30 17:26 1494次阅读
    深入理解C语言:函数—编程中的“积木块”艺术

    阳光倒灌高准直太阳光模拟器在汽车HUD杂散光分析及光学性能验证关键作用

    HUD需在复杂光照环境(如强日光)下清晰投射信息,但挡风玻璃、光学元件或屏幕的反射/散射会形成杂散光(如重影、光晕),严重降低对比度和可读性,甚至干扰驾驶安全。
    的头像 发表于 04-27 16:39 479次阅读
    阳光倒灌高准直太阳光模拟器在汽车HUD杂散光分析及光学性能验证关键作用

    RAKsmart企业服务器上部署DeepSeek编写运行代码

    在RAKsmart企业服务器上部署并运行DeepSeek模型的代码示例和详细步骤。假设使用 Python + Transformers库 + FastAPI实现一个基础的AI服务。主机推荐小编为您整理发布RAKsmart企业服务器上部署DeepSeek编写运行
    的头像 发表于 03-25 10:39 540次阅读

    BEM+Sass结合使用的最佳实践

    BEM(Block Element Modifier)与Sass的结合使用是前端开发中一种高效且规范的样式编写方式。以下是一些最佳实践,旨在帮助开发者更好地利用这两种工具来提高代码可读性、可维护
    的头像 发表于 02-12 16:50 954次阅读

    如何提高嵌入式代码质量?

    的错误和改进点,提高代码可读性和健壮。 4. 版本控制:使用版本控制系统如Git,可以追踪代码变更并轻松进行团队协作,确保每个版本都是可控和可重现的。 优化性能和资源利用率
    发表于 01-15 10:48

    EE-134:为SHARC系列编写C兼容汇编代码中断处理程序

    电子发烧友网站提供《EE-134:为SHARC系列编写C兼容汇编代码中断处理程序.pdf》资料免费下载
    发表于 01-07 13:58 0次下载
    EE-134:为SHARC系列<b class='flag-5'>编写</b>C兼容汇编<b class='flag-5'>代码</b>中断处理程序

    gitee 支持的编程语言有哪些

    Gitee 支持的常见编程语言: Python :一种广泛使用的高级编程语言,以其清晰的语法和代码可读性而闻名。 Java :一种面向对象的编程语言,被广泛用于企业级应用开发。 C++ :一种通用的、静态类型的、大小写敏感的、自由格式的编程语言,支持过程化编程、面向对象
    的头像 发表于 01-06 09:50 1107次阅读

    西门子流量累计FB块介绍

    成一个易于使用的模块,从而简化了编程工作,提高了代码可读性和维护。    一、意义    简化编程 :通过使用预先编写好的FB块,工程师可以快速地实现流量累计功能,而无需从头
    的头像 发表于 12-19 10:28 2248次阅读
    西门子流量累计FB块介绍

    Verilog与VHDL的比较 Verilog HDL编程技巧

    理解。 VHDL :VHDL 的语法更接近于 Ada 语言,它是一种更正式的语言,具有丰富的数据类型和结构。VHDL 支持数据流、行为和结构化三种描述方式。 2. 可读性和可维护 Verilog
    的头像 发表于 12-17 09:44 2689次阅读

    API接口有哪些常见的安全问题

    和XML是主流的数据格式,几乎所有API接口都支持这两种数据格式。 JSON是一种轻量级的数据交换格式,最大的特点就是具有良好的可读性和便于快速编写的特性,可在不同平台之间进行数据交换。 XML是扩展标记语言,用于标记电子文件使其具有结构
    的头像 发表于 12-15 09:54 1078次阅读
    API接口有哪些常见的安全问题