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

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

3天内不再提示

烂代码你能忍吗?优秀的代码VS糟糕的代码

C语言编程基础 来源:未知 作者:伍文辉 2018-03-30 10:09 次阅读

可持续开发不仅在于项目架构设计,还与代码质量密切相关,代码的整洁度和质量成正比。—— Robert C. Martin, “Clean Code”

如果你还没有发现代码质量的区别,如果你从未见过优秀的代码,或者从未见过糟糕的代码,那么本文将以直观地对比,告诉你代码质量究竟会有多大的区别。

[ 代码量 ]

我们知道代码量显示着功能的复杂程度,例如Windows XP的代码量超过2000万行,Linux内核有1500万行(2012年)。然而代码量和功能数量之间并非线性关系。

优秀的设计中,代码量和功能数的关系是这样的:

糟糕的设计中,代码量和功能数的关系是这样的:

优秀的系统往往会有优秀的结构设计:层次清晰、职责单一、模块化,方便扩展或者复用。功能的添加往往只是在现有框架中添加少量代码。

然而糟糕的设计中,层次混乱、互相耦合、难以阅读,既难以复用又不易扩展。每当被要求添加功能时,不得不几乎完整地实现整个功能的流程,并修复与原系统的所有兼容问题。

[ 注释]

优秀的代码中,注释是这样的:

糟糕的代码中,注释是这样的:

最愚蠢的程序员都能写出机器能读懂的代码,而优秀的程序员能写出人可以读懂的代码。

程序的注释是为了让人读得懂。多数优秀的代码中,注释几乎接近代码行数的一半,描述函数功能、解释参数配置、指出陷阱所在。而糟糕的代码中不仅不含这些注释,甚至会保留大量残余代码,可读性差又难以重构。

[ 命名]

优秀的代码中,命名是这样的:

糟糕的代码中,命名是这样的:

命名是为了让代码更加容易阅读,使用规范的术语不仅更加易懂,同时也是开发者知识水平和开发经验的表现。如果说以中文拼音命名显得奇怪,那么直接以a, b, c, d命名的便会显得可恨,谁记得你的a是神马东西!

看一个经典的例子,字符串替换:

稍微有点Javascript常识的便会想到正则表达式:

何必拷贝这一堆的代码给老板看呢?开发中确实有很多时候,直接拷贝代码既能立竿见影地完成功能,又不会影响原有功能。但这样的代码多起来之后,万一功能调整你便需要重新debug所有的副本。花一些时间学习更优雅的用法是值得的。

[ 函数 ]

保持函数的短小,使你的代码更加易读,例如:

将复杂的逻辑分步骤完成。如果写在一起将会是这样的:

相信我,一旦你写了这样的函数,它会随着时间的推移变得越来越长,直到有一天,你也忘了其中的一段代码到底是做什么的。

事实上,复杂的函数不仅可以按照步骤划分,更应按照层次来细化。不要在一个函数中进行不同层次的操作,否则它会变得非常难懂。

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

    关注

    30

    文章

    4536

    浏览量

    66496
  • 程序员
    +关注

    关注

    4

    文章

    931

    浏览量

    29553

原文标题:没有对比就没有伤害,优秀的代码VS糟糕的代码

文章出处:【微信号:xx-cyy,微信公众号:C语言编程基础】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    实现TCP的C代码封装(含代码

    实现TCP的C代码封装(含代码
    的头像 发表于 09-28 16:03 1907次阅读
    实现TCP的C<b class='flag-5'>代码</b>封装(含<b class='flag-5'>代码</b>)

    如何设置VS代码配置来调试嵌入式处理器

    如果您开始使用Visual Studio Code(VS Code)开发嵌入式软件,马上需要回答的一个问题是:“如何调试我的代码?”在微控制器(MCU)供应商提供的使用Eclipse的IDE中,调试
    的头像 发表于 12-05 11:08 471次阅读
    如何设置<b class='flag-5'>VS</b><b class='flag-5'>代码</b>配置来调试嵌入式处理器

    VS生成MaterialDesign项目代码问题

    今天工作中遇到了VS生成MaterialDesign项目代码时,VS提示.NetCore3.1 Build error in azure function project, Metadata
    发表于 11-10 07:34

    GPIO如何只更新通知代码而不是替换旧代码吗?

    大家好,当我尝试更改 GPIO 通知时遇到问题,然后我按下“生成代码”。但它取代了我的旧代码告诉我如何只更新通知代码而不是替换旧
    发表于 01-31 07:44

    好赢电调代码

    无刷电机好赢电调代码代码内容全有注释方便。
    发表于 04-26 16:26 90次下载

    参考代码--俄罗斯游戏代码

    使用C语言编程的参考代码--俄罗斯游戏代码
    发表于 05-20 17:01 14次下载

    让你的 Python 代码优雅又地道

    P vs NP (pythonic vs non-pythonic)的讨论。pythonic的代码简练,明确,优雅,绝大部分时候执行效率高。阅读pythonic的代码能体会到“
    的头像 发表于 03-06 10:35 3382次阅读

    只需要一秒钟,就可以使用VS Code阅读Github代码

    【导语】:只需要一秒钟,就可以使用 VS Code 阅读 Github 代码。 Github 是全世界程序员最活跃的社区,因为上面有着许多开源、优秀的项目,Github 对程序员来说就是一个宝藏
    的头像 发表于 02-23 11:38 2144次阅读

    九个单片机仿真优秀案例及源代码

    九个单片机仿真优秀案例及源代码
    发表于 03-17 09:13 160次下载
    九个单片机仿真<b class='flag-5'>优秀</b>案例及源<b class='flag-5'>代码</b>

    微软最新写代码神器代码之旅

    【导语】:CodeTour(代码之旅)是微软官方开发的 VS Code 扩展,允许记录和回放代码的演练和思路。 简介 CodeTour 是一个 VS Code 插件,允许记录和回放
    的头像 发表于 10-26 10:00 1445次阅读

    VS上配置MPI教程(含代码

    VS上配置MPI教程(含代码
    发表于 01-17 11:24 0次下载

    什么是整洁的代码

    WTF/min是衡量代码质量的唯一标准,Uncle Bob在书中称糟糕代码为沼泽(wading),这只突出了我们是糟糕代码的受害者。国内有
    的头像 发表于 01-30 10:45 284次阅读

    静态代码块、构造代码块、构造函数及普通代码块的执行顺序

    在Java中,静态代码块、构造代码块、构造函数、普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序。 1、静态代码块 ①、格式 在java类中(方法
    的头像 发表于 10-09 15:40 382次阅读
    静态<b class='flag-5'>代码</b>块、构造<b class='flag-5'>代码</b>块、构造函数及普通<b class='flag-5'>代码</b>块的执行顺序

    vs中如何快速注释多行代码

    VS中,快速注释多行代码可以通过以下几种方法实现。我将详细介绍每种方法的步骤和应用场景。 方法一:块注释 块注释是一种常见的注释多行代码的方法。它适用于需要注释大块代码的情况,可以方
    的头像 发表于 11-22 10:26 5922次阅读

    g代码和m代码表示什么功能

    G代码和M代码是数控机床程序中常用的两种指令代码,用于控制数控机床的工作动作和运动方式。 G代码是指控制机床工作动作的指令代码,它是一种简单
    的头像 发表于 02-14 15:49 751次阅读