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

    文章

    2149

    浏览量

    66241
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    HarmonyOS应用代码混淆技术方案

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

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

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

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

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

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

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

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

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

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

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

    OLED代码分享

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

    在Deepseek AI眼中,配电室是做什么用的?

    DEEPSEEK眼中的配电室什么样?嗯,用户问配电室是做什么用的,我需要先理解配电室的基本功能。配电室听起来像是和电力分配有关的地方,对吧?可能和电力系统有关,比如建筑物或者工厂里的电力分配。首先,我应该明确配电室的主要作用是什么。
    的头像 发表于 03-05 09:38 653次阅读

    什么是物联网智能路灯? 智慧路灯是什么?什么样的智慧路灯更满足现代需求

    什么是物联网智能路灯? 智慧路灯是什么?什么样的智慧路灯更满足现代需求
    的头像 发表于 02-18 10:19 1067次阅读
    什么是物联网智能路灯? 智慧路灯是什么?<b class='flag-5'>什么样</b>的智慧路灯更满足现代需求

    分析C语言代码结构的设计问题

    来分析一个C语言代码结构的设计问题。 这段代码,使用了两次malloc,分别给 p1 和 p2 申请了内存。用完后,内存释放,防止内存泄漏。 大家觉得,这样的代码设计有没有问题。 代码
    的头像 发表于 02-11 09:31 667次阅读

    代码与传统开发的区别 低代码与无代码开发的区别

    在软件开发领域,传统开发、低代码开发以及无代码开发是三种不同的开发方式,每种方式都有其独特的优势和适用场景。 一、低代码开发与传统开发的区别 低代码开发是一种新兴的应用程序开发方法,旨
    的头像 发表于 01-31 10:48 1055次阅读

    用于 SPI 绝对编码器的 Arduino 示例代码

    : [Arduino 板] [AMT22 编码器] [AMT-06C-1-036 电缆] ,或带有相应连接器的类似电缆 [Arduino IDE] [下载 AMT22 单圈代码] [下载 AMT22 多圈
    的头像 发表于 01-26 21:35 1297次阅读
    用于 SPI 绝对编码器的 Arduino 示例<b class='flag-5'>代码</b>

    关于cc2541程序代码

    CC2541哪里有cc2541的模数转换模块和蓝牙模块的程序代码例呀?初学不懂
    发表于 01-20 07:14

    什么样代码会被编译器优化

    现在的编译器有多智能,可能你辛辛苦苦写的代码,在编译器看来就是几句废话,直接被删除掉。
    的头像 发表于 01-16 16:38 932次阅读

    代码在敏捷开发中的应用

    代码平台的定义 低代码平台提供了一个可视化的、拖放式的用户界面,允许开发者通过图形化的方式快速构建应用程序,而无需编写大量的代码。这些平台通常包括预构建的模板、组件和逻辑模块,使得开发人员可以专注
    的头像 发表于 01-07 09:58 749次阅读