`

什么样的代码才是好代码

阅读更多

 

衡量代码的好坏的指标或者维度有很多,比如性能好、架构好、高内聚等,这些指标的侧重点各不相同,不同的开发人员的关注的重点也各不相同。我个人更喜欢简单的可读性高的代码,我主要从以下几个维度衡量代码是否良好:

  • 代码是可工作的
  • 代码是可读性高的
  • 代码是简单的
  • 代码是高内聚的
  • 代码是低耦合的

代码是可工作的

写代码的目的是要为了解决特定问题的,因此无论如何,代码首先是可工作的,能解决特定的问题。可工作的包含有两层含义:一是从功能角度来说能满足用户的需求,二是从性能角度来说要满足当前基本的性能需求。所以可工作是衡量代码好坏的前置条件,只考虑代码本身不考虑可工作性是舍本取末。

代码是可读性高的

代码是开发人员来开发和维护的,而且在软件漫长的生命周期中,通常会由不同的开发人员来维护的,如果代码的可读性很差,那将来的维护就将是一个噩梦。我们写的代码是给开发人员看的,绝对不是给机器看的(编译后的代码是给机器看的,编译器会帮我们去掉无意义的空行等),因此代码必须首先是可读性高的。

那什么是可读性高的代码呢?从coding style角度来说,有意义的命名、添加必要的文档和注释、类和方法不要太长、每一行也不要太长、添加必要的空行以及必要的缩进等,具体可以参考《C++编程规范》和《重构 改善既有代码的设计》。另外一方面就是从代码的结构来定义,例如代码是高内聚、低耦合的,代码是简单的,这三个方面下面会有详细描述。

代码是简单的

我们先来看一下什么是复杂的代码,比如说美其名曰为了代码的扩展性,使用了好多设计模式和软件开发原则,结果就是明明可以用很简单几行代码搞定的事情,结果用了几十行代码甚至更多,而且代码用了各种酷炫的技术,但是事实上大部分的扩展性可能一辈子也没有发生过,从敏捷开发角度来说,这是非常典型的过度设计。敏捷开发不是不考虑设计,只是不推崇过度设计,比如考虑10年后系统的扩展性是没有任何意义的,另外一种场景是只是做一个简单的后台管理系统,但是却花大量的精力考虑高并发也是没有意义的,过度设计的代码通常是复杂的。

所以在适度考虑代码的可扩展性的基础上,能不用设计模式就不要用设计模式,能不用新的、复杂的技术就不用新的、复杂的技术,技术够用就好,代码越简单越好,有人说代码太简单是不是有点low,其实写出高质量的简单代码远比写出复杂的代码难度高,尤其是系统比较复杂时,保持代码的简单性难度是非常大的。

所以说简单的代码就是:代码所有人都看得懂,尤其是新人,但是又具备一定的扩展性和维护性,简单的讲就是简约而不简单。复杂的代码首先对读代码的人要求就很高,最终导致代码很难维护。代码是简单的是代码可读性高的一个方面。

代码是高内聚的

内聚是从功能角度来度量模块内的联系,代码关联性比较强的代码应该放在内聚在一起,形成一个独立的功能模块,可以是一个独立的类,也可以是一个微服务。其实判断代码是否内聚一个比较简单的方法就是看你能否给代码或者服务给一个贴切的名字,如果代码功能不内聚,我们是很难用一个简短的名字来表示它的含义的。

代码是低耦合的

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。

耦合比较高的代码危害比较大,最常见的表现就是改一个模块的代码会影响许多其它模块,最终必然导致大家不敢修改旧的代码,只能不停的添加新的接口,系统的可维护性非常差。

 

from  http://www.techug.com/post/what-code-is-good-code.html

分享到:
评论

相关推荐

    好的程序员如何写代码

    【好的程序员如何写代码】 优秀的程序员在编写代码时展现出的专业素养和艺术感是评判其技能水平的重要标准。代码不仅是实现功能的工具,更是展现技术才华和思维清晰度的载体。以下是一些关于好的程序员写代码的特点...

    怎么样写好安全代码

    6. **避免冗余**:注释不应重复代码本身已经表达的信息,而是要解释为什么要这么做。 7. **注释掉困惑的代码**:如果某些代码难以理解,最好将其注释掉并重新编写更为清晰的代码。 #### 示例:Javadoc注释 ```java...

    B样条拟合源代码程序

    **B样条曲线拟合** B样条(B-Spline)是一种在计算机图形学、几何建模、工程计算等领域广泛应用的数学工具。...而对于有经验的开发者,这个代码可以作为快速实现B样条拟合功能的起点,或者作为优化和扩展的基础。

    bilibili哔哩哔哩代码模式长什么样.docx

    bilibili哔哩哔哩代码模式长什么样 bilibili哔哩哔哩代码模式是指在bilibili平台上上传视频时使用的特殊格式代码,用于标识和组织视频内容。这种代码模式可以帮助用户快速查找和播放视频,并且可以实现视频的批量...

    matlab绘制B样条曲面代码.rar_Bspline曲面MATLAB_B样条曲线matlab_B样条曲线曲面_am9i2_b样

    通过实践这些例子,你可以更好地理解和应用B样条在实际问题中的强大功能,无论是进行数据拟合、曲线拟合还是复杂形状的建模。在实际应用中,你还可以结合其他MATLAB工具,如优化算法,来调整控制点以达到理想的形状...

    vc++绘制b样条曲线代码

    根据提供的文件信息,我们可以总结出以下关于“vc++绘制B样条曲线代码”的知识点: ### 一、基础知识 #### 1. B样条曲线简介 B样条(B-spline)是一种常用在计算机图形学中的参数曲线,它可以平滑地连接多个控制点...

    eclipse编辑代码模板

    通过阅读并理解这份文档,开发者可以更好地按照行业最佳实践编写代码。 接下来,我们关注`在Eclipse中导入代码格式化配置文件及代码模板.doc`。Eclipse允许用户自定义代码格式化规则,这可以通过`Window > ...

    B样条曲线的实现代码

    这篇文档将深入讲解二次和三次B样条曲线的实现原理及代码实现,旨在帮助读者理解和应用这种强大的曲线构造方法。 首先,我们要理解B样条曲线的基本概念。B样条(B-Spline)是由一组控制点定义的分段多项式曲线,它...

    B样条曲线曲面拟合精选代码汇总

    在“B样条曲线曲面拟合汇总”这个压缩包中,可能包含了一些示例代码,这些代码可能涉及到上述的各种技术,如控制点的设置、节点向量的处理、De Boor's算法的实现、NURBS的权重计算等。通过学习和分析这些代码,可以...

    B样条曲线的代码实现

    本篇文章将深入探讨B样条曲线的理论基础,并提供在Visual Studio(VS)环境下,利用EasyX图形库实现B样条曲线的代码示例。 首先,我们需要理解B样条曲线的基本概念。B样条(Bezier Spline)是由一系列贝塞尔曲线...

    B样条曲线演示程序的代码.zip

    **B样条曲线** ...通过这个程序,开发者和学习者可以更好地理解和掌握B样条曲线的原理,以及如何在实际项目中利用Qt进行图形绘制。同时,这也是一个学习和实践C++编程、Qt库以及图形算法的好资源。

    职业代码_冒险岛代码_冒险岛_冒险岛脚本_stared7t3_冒险岛gm代码_

    分析和理解这些脚本,开发者可以更好地调整游戏性能,修复bug,甚至为游戏添加新的特性。 然后,我们关注的是“冒险岛GM命令”。GM命令是游戏管理员(GM)用来维护游戏环境、处理玩家问题和进行游戏管理的特殊指令...

    b样条曲线C语言代码-样条曲线算法实现代码-曲线拟合-曲线平滑-样条曲线计算-二次样条曲线-三次样条曲线

    这是一份C语言版本的b样条曲线算法代码,可以实现二次和三次的b样条曲线绘制,可作为曲线平滑或者曲线拟合的代码使用。代码实现封装为连个函数,一个是实现给定三点或者四点计算样条曲线平滑点,一个是计算一些列...

    代码 单样本修正感知器算法代码

    代码 单样本修正感知器算法代码代码 单样本修正感知器...单样本修正感知器算法代码代码 单样本修正感知器算法代码代码 单样本修正感知器算法代码代码 单样本修正感知器算法代码代码 单样本修正感知器算法代码代码 单样

    魔力宝贝单机纪念版 物品代码

    在探讨《魔力宝贝单机纪念版》的物品代码时,我们进入了一个充满魔法与宝藏的游戏世界,这里每一个代码都代表了一种特定的物品或装备,对于玩家来说,掌握这些代码意味着能够更深入地理解游戏机制,甚至在某些情况下...

    XX系统源代码安全审计报告(模板).doc

    者理解本次源代码安全审计的上下文。XX系统是一个复杂的信息技术解决方案,涵盖了多个模块和功能,包括用户接口、数据库管理、数据处理和网络通信等。审计对象为该系统的全部源代码,旨在确保代码的安全性,防止潜在...

    新版海信空调故障代码_海信空调故障代码表查询_海信中央空调故障代码大全.doc

    此外,还可以帮助空调器的使用者更好地了解和使用空调器,避免出现各种故障。 因此,海信空调故障代码是一个非常实用的诊断工具,对于维修人员和空调器的使用者都非常有帮助。 在未来,海信空调故障代码还将继续...

    spark的代码

    在这个压缩包中,我们可以看到与Spark相关的代码示例,同时提到了Kafka和Redis这两个组件,它们分别是分布式消息队列和键值存储系统。 Kafka是由Apache开发的分布式流处理平台,常用于构建实时数据管道和流应用。它...

    游戏宏代码格式样品

    这些知识点将帮助我们更好地理解宏代码的工作原理、结构以及如何利用这些宏来优化游戏中的操作流程。 ### 宏代码基础 宏代码是一种在游戏中自动化执行一系列命令的方式。它们通常用于简化玩家的操作流程,提高效率...

    Android-最简单的方法来使用RecyclerView减少样板代码

    在本文中,我们将深入探讨如何利用RecyclerView来减少样板代码,特别是在创建适配器时,通过一种更简洁、更通用的方法来实现。 通常,当我们使用RecyclerView时,需要自定义一个适配器(Adapter)来连接数据源与视图...

Global site tag (gtag.js) - Google Analytics