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

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

3天内不再提示

代码整洁之道-大师眼中的整洁代码是什么样

京东云 来源:jf_75140285 作者:jf_75140285 2024-09-09 16:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

几个月前写了一篇文章“如何写出难以维护的代码”,从中能大概了解到不好维护的代码是什么样,有哪些坏味道,那肯定有人会反问,难以维护的代码见的太多了,也知道长什么样,但是对于好维护的代码是什么样的比较模糊,带着这个问题,本人读完了世界软件开发大师马丁的《代码整洁之道》这本书,来了解下大师眼中的整洁代码画像是什么样的,相信能给你带来不一样的理解和感悟。

wKgZombesjCAGIWdAAHN7xWKtsQ450.png

关于整洁代码,没有明确的定义,有多少程序员就有多少种定义。下面先看下几位大师是如何定义的。

C++语言发明者Bjarne Stroustrup提到:

代码应该优雅高效,代码逻辑应该直截了当,让缺陷难以隐藏尽量减少依赖关系,便于维护;按照某种分层策略完善错误处理,性能调到最优,不会让别人修改的更混乱整洁的代码只做一件事



《面向对象分析与设计》一书作者Grad Booch提到:

整洁的代码简单直接,如同散文一样优美从不隐藏设计者的意图,代码抽象干净利落,控制语句直截了当。



Eclipse战略教父Dave Thomas这么定义:

整洁的代码应可由其他开发者阅读和增补,应当有单元测试和验收测试,使用有意义的命名,只提供一种而非多种做一件事的途径,只有尽量少的依赖关系,而且要明确地定义和提供清晰、尽量少的API



《修改代码的艺术》一书作者Michael Feathers定义:

整洁代码应该是特别在意代码的人才能写出来的,几乎没有改进的余地,作者各种情况都想到了,如果你想改进它,总会回到原点,总会赞叹写代码的人的专心和认真。



《极限编程实施》作者Ron Jeffries提出整洁代码:

能通过所有测试,没有重复代码,代码能体现设计理念,尽量减少类,方法以及函数。



综合以上几位大师对整洁代码的定义阐述,可以归纳总结一下整洁代码的画像:

1.体现设计理念,这个整洁代码特性在以上大师的定义里面多次提到了,Grady提到整洁代码不会隐藏设计意图,Ron提到整洁代码一看就知道采用了什么样的设计理念。体现设计理念看上去有点虚,但是实际上我认为是最重要的一点,所谓代码即设计,只要能回答代码为什么这么写,就说明你的代码有设计思想在里面,即便一行代码都能体现出设计理念,比如一个有意义的命名也是设计的一种表现。

2.没有重复代码,如果你两处代码相同或者大部分重复,说明代码不够整洁,同时说明代码没有去做好设计。消除重复代码意味着减少类和方法以及相关API。

3.代码只做一件事,很多代码由于想做太多事,目的不明确,意图混乱,结果代码变得很糟糕,代码只做一件事,也称单一职责,这个几乎是很多软件设计里面经常提到的一个警句,这个原则看似很简单,但是实际上执行起来不是那么简单,或者说,一时坚持这个原则很容易,难的是一直坚持这个原则,如果始终能践行这个原则,代码整洁度能达到质的飞跃。

4.代码好阅读,关于阅读,Bjarne用“优雅”来形容,优雅意味着优美雅致,所以在他看来,代码应该优美,给人以愉悦感,Grad也提到代码应该像散文一样优美,让阅读的人看完一段想看下一段,能很明显的展现出解决问题的表达力和张力,阅读者会不停的发出“啊哈,应该这样来处理!”的感叹。反之,如果代码不好阅读,阅读者看完后还需要猜测所表达的意思,对所实现的功能持怀疑态度,甚至有心惊胆战的心理,会在心里不停的反问:"不会吧,这都可以在线上运行?”我们在修改代码或写新代码之前都要阅读周边代码,如果阅读代码很难,则写代码也会很难,据统计读代码和写代码时间比例是10:1,编写代码的难度,取决于读周边代码的难度。要想干得快,要想早点做完,要想轻松写代码,先让代码易读吧。

5.代码好修改,Dave提到整洁代码应该可以让其他开发者进行增补,也就是很容易进行功能的增加,毕竟很多系统代码都要不停的迭代更新,需要基于原代码进行增补,所以代码的易修改就显得格外的重要,试想如果一个开发者写的代码别人没法修改或者不敢改,那你说这隐患有多大。我们经常嘴巴提到的系统可维护性,实际上说的更具体点,更多的指的是代码的可修改方面。



将以上5点整洁代码的画像总结一句话:





体现设计理念,代码不重复,只做一件事,好阅读和修改!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    2476

    浏览量

    67026
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74384
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32N6 在 PSRAM 上运行代码的调试

    1. 引言STM32N6 项目中,用户代码可能会比较大,此时仅用内部 SRAM 并不能满足用代码运行需求。那么,将代码放置到 PSRAM 上运行也是个不错的选择。2. 问题2.1. 问题详情客户在
    发表于 04-15 16:02 0次下载

    SonarQube代码质量管理平台详解

    代码质量问题是技术债务的主要来源。一个未被发现的空指针异常可能在生产环境导致服务崩溃,一段存在SQL注入漏洞的代码可能让整个数据库暴露在攻击者面前。传统的Code Review依赖人工审查,效率低下且容易遗漏。
    的头像 发表于 03-11 09:40 418次阅读

    分析嵌入式软件代码的漏洞-代码注入

    进行编译 在大多数情况下,程序故意像执行代码执行数据是不寻常的,但将数据用于构造有意执行的对象却很常见。 1、格式化字符串漏洞 大多数C程序员熟悉printf函数。大体上,这些格式字符串
    发表于 12-22 12:53

    HarmonyOS应用代码混淆技术方案

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

    TE Connectivity推出全新双槽SIAMEZE端子

    在阀门产品迭代中,电磁阀正面临空间极限与布线整洁的双重挑战。
    的头像 发表于 11-17 16:14 1085次阅读

    在极海APM32系列MCU中如何把代码重定位到SDRAM运行

    在有些情况下,我们想要把代码放到SDRAM运行。下面介绍在APM32的MCU中,如何把代码重定位到SDRAM运行。对于不同APM32系列的MCU,方法都是一的。
    的头像 发表于 11-04 09:14 5400次阅读
    在极海APM32系列MCU中如何把<b class='flag-5'>代码</b>重定位到SDRAM运行

    代码开发平台推荐:2025国内低代码开发平台排名TOP10

    代码开发平台排行榜 在企业数字化转型的浪潮中,低代码开发平台正逐渐成为企业实现高效开发和快速迭代的重要工具。随着技术的不断进步和市场需求的持续增长,低代码开发平台的市场竞争也日益激烈。以下
    的头像 发表于 10-28 10:22 954次阅读

    2025主流低代码平台有哪些:低代码开发平台选型指南指南

    在企业数字化转型进入深水区的当下,低代码开发平台已从早期的“效率工具”升级为“核心基建”。其工程化能力、流程适配深度、技术延展性与行业积淀,直接决定了企业转型的成效。据Gartner预测,到2026
    的头像 发表于 10-22 11:49 535次阅读

    外壳防护等级(IP代码)全解读

    什么是外壳防护等级(IP代码)IP代码,全称为“国际防护等级”,是由国际电工委员会制定的全球通用标准。这一标准旨在为电子设备外壳的防护能力提供一个清晰、统一的评判体系。简单来说,IP代码就是电子设备
    的头像 发表于 10-14 12:13 1474次阅读
    外壳防护等级(IP<b class='flag-5'>代码</b>)全解读

    代码格式化工具Clang-Format提升你的CW32工程质量

    它能自动统一团队代码风格,让不同开发者写出的代码如出一辙。就像 CW32 官方库函数遵循统一规范一,Clang-Format 能让团队所有成员的代码瞬间保持一致,彻底消除 "tabs
    的头像 发表于 10-09 17:43 1310次阅读
    <b class='flag-5'>代码</b>格式化工具Clang-Format提升你的CW32工程质量

    智行者蜗小白重塑地铁清洁新标准

    智行者无人驾驶清洁车蜗小白自今年5月在深圳地铁“上岗”以来,逐渐成为乘客眼中的“熟面孔”,并已高效服务于深圳地铁2号线、8号线、10号线等6条线路共计30个核心站点,用科技的力量守护这座城市窗口的整洁
    的头像 发表于 08-26 14:01 1319次阅读

    Ansible代码上线项目实战案例

    在DevOps浪潮中,自动化部署已经成为每个运维工程师的必备技能。今天我将分享一个完整的Ansible代码上线项目实战案例,让你的部署效率提升10倍!
    的头像 发表于 07-24 14:03 759次阅读

    单模光缆型号字母代码及其含义

    单模光缆的型号字母代码主要用于标识光缆的分类、结构、护层及光纤类型等关键信息,以下是一些常见的单模光缆型号字母代码及其含义: 一、光缆分类代码 GY:通信用室外光缆,这是最常见的室外光缆分类
    的头像 发表于 07-17 10:27 3637次阅读

    企业和个人基于业务知识和代码库增强的大模型生成代码实践

    :“这个功能之前做过类似的,你参考下历史代码。”可当他打开代码仓库,却发现注释寥寥,变量名像密码一难懂,更找不到任何需求文档。他硬着头皮修改,结果上线后引发了线上故障——原来有个隐藏的业务规则,只有老员工才知道。 第二周:
    的头像 发表于 07-08 15:31 531次阅读
    企业和个人基于业务知识和<b class='flag-5'>代码</b>库增强的大模型生成<b class='flag-5'>代码</b>实践

    OLED代码分享

    OLED代码
    发表于 04-29 17:04 2次下载