什么样的代码才算是好代码

简介: 小编是一名7年iOS开发人员,在这里诚挚邀请各位还在坚持iOS的人程序员,不管你是十年大牛还是三年渣硕,肯学肯交流就加入我私人的一个交流群681503716,验证编码:大鲨,里面都有关于iOS的学习资料一起努力进步,我们为iOS付出那么多,不应该随便放弃吧什么样的代码才是好代码?衡量代码的好坏的指标或者维度有很多,比如性能好、架构好、高内聚等,这些指标的侧重点各不相同,不同的开发人员的关注的重点也各不相同。

小编是一名7年iOS开发人员,在这里诚挚邀请各位还在坚持iOS的人程序员,不管你是十年大牛还是三年渣硕,肯学肯交流就加入我私人的一个交流群681503716,验证编码:大鲨,里面都有关于iOS的学习资料一起努力进步,我们为iOS付出那么多,不应该随便放弃吧

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

一、代码是可工作的

写代码的目的是要为了解决特定问题的,因此无论如何,代码首先是可工作的,能解决特定的问题。可工作的包含有两层含义:
1、从功能角度来说能满足用户的需求
2、从性能角度来说要满足当前基本的性能需求。

所以可工作是衡量代码好坏的前置条件,只考虑代码本身不考虑可工作性是舍本取末。

二、代码是可读性高的

代码是开发人员来开发和维护的,而且在软件漫长的生命周期中,通常会由不同的开发人员来维护的,如果代码的可读性很差将

来的维护就将是一个噩梦。我们写的代码是给开发人员看的,绝对不是给机器看的(编译后的代码是给机器看的,编译器会帮我们去掉无意义的空行等),因此代码必须首先是可读性高的。

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

三、代码是简单的


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

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

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

四、代码是高内聚的


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

五、代码是低耦合的


耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。
耦合比较高的代码危害比较大,最常见的表现就是改一个模块的代码会影响许多其它模块,最终必然导致大家不敢修改旧的代码,只能不停的添加新的接口,系统的可维护性非常差。

本文只是描述我心中的好代码,并不打算说明如何编写好代码,那需要太多的篇幅和太多的争议。所以,至此为止。

小编是一名7年iOS开发人员,在这里诚挚邀请各位还在坚持iOS的人程序员,不管你是十年大牛还是三年渣硕,肯学肯交流就加入我私人的一个交流群681503716,验证编码:大鲨,里面都有关于iOS的学习资料一起努力进步,我们为iOS付出那么多,不应该随便放弃吧

相关文章
|
3月前
|
人工智能 Java 关系型数据库
分享66个JavaGame源码总有一个是你想要的
分享66个JavaGame源码总有一个是你想要的
62 0
|
3月前
|
人工智能 小程序 算法
分享64个JavaGame源码总有一个是你想要的
分享64个JavaGame源码总有一个是你想要的
41 0
|
7月前
|
缓存 小程序 前端开发
赢麻了!smardaten闷声干大事,竟然用无代码开发了复杂小程序!
赢麻了!smardaten闷声干大事,竟然用无代码开发了复杂小程序!
|
2月前
|
小程序 机器人 Python
分享28个VX小程序源码,总有一款适合您
分享28个VX小程序源码,总有一款适合您
55 1
|
3月前
|
文字识别 NoSQL 物联网
分享55个C源码源代码总有一个是你想要的
分享55个C源码源代码总有一个是你想要的
30 1
|
3月前
|
设计模式 算法 Java
|
8月前
|
机器学习/深度学习 自然语言处理 算法
程序员的炫技代码写法
程序员的炫技代码写法
|
9月前
|
缓存 算法 安全
程序员写代码为什么要阅读源码?
阅读一篇技术文章,畅聊一个技术话题。本期文章推荐的是《Node 中的 AsyncLocalStorage 的前世今生和未来》,一起来聊聊开发者阅读源码的这件事。阅读源码的过程实质上是对软件构建技术和架构深度的一种持续学习和理解。阅读源码可以揭示代码的内在逻辑,可以对技术深度的理解,也能提高对技术的理解程度。然而,仅仅阅读源码并不能代替实践操作,因为通过实践,可以更加全面的理解代码的深度和进展。
101 1
|
编解码 前端开发 程序员
为啥只跟着视频敲代码学不好编程?
为啥只跟着视频敲代码学不好编程?
303 1
|
存储 Java
来自三段代码的疑惑~
来自三段代码的疑惑~
88 0