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

简介: 小编是一名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付出那么多,不应该随便放弃吧

相关文章
|
NoSQL Java Linux
springboot 中spring-data-redis报错:远程主机强迫关闭了一个现有的连接,如何解决?
springboot 中spring-data-redis报错:远程主机强迫关闭了一个现有的连接,如何解决?
springboot 中spring-data-redis报错:远程主机强迫关闭了一个现有的连接,如何解决?
|
数据库 数据安全/隐私保护 Android开发
微信聊天记录导出为电脑txt文件教程
本文的最终目的是将手机微信的聊天记录导出到电脑里,变成txt文本文件,然后对其进行分析。 网上有一些工具也可以完成这个功能,但是基本都是付费的。手动操作的话,找了很多的博客,基本没有完全有效的。最终找到一篇很靠谱的教程:传送门,本文基本参考这篇进行整理。首先上我的github把所有需要的文件下载下来:https://github.com/godweiyang/wechat-explore,用法稍后说明。
4265 0
微信聊天记录导出为电脑txt文件教程
|
9月前
|
SQL 数据可视化 JavaScript
子任务层级拆分工具深度分析:多层级管理如何提升任务推进效率?
在复杂项目中,清晰的任务层级拆分至关重要。子任务层级拆分工具帮助团队将大目标细化为可执行、可追踪的结构,提升协作效率,避免遗漏与推诿。适用于研发、运营、内容及远程团队,让任务管理更透明可控。
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
452 5
|
存储 缓存 监控
【赵渝强老师】HBase的体系架构
本文介绍了HBase的体系架构,包括HMaster、RegionServer和ZooKeeper的主要功能。HMaster负责Region的分配和管理,RegionServer处理数据的读写操作,ZooKeeper维护集群状态并协调分布式系统的运行。文章还详细解释了Region、WAL预写日志、Block Cache读缓存和MemStore写缓存的作用。
785 0
|
自然语言处理 安全 编译器
Python 中的编译和链接过程
【8月更文挑战第29天】
450 6
|
数据采集 资源调度 监控
数字化转型的关键工具:甘特图的应用与优势
在数字化转型浪潮中,企业面临复杂的项目规划、资源分配不均、进度监控困难等挑战。甘特图作为一种经典项目管理工具,通过任务可视化、资源优化、实时监控和跨部门协作等功能,助力企业高效应对这些难题,推动智能化、数据化变革。本文深入探讨甘特图的应用价值及其在制造业、零售业和金融业的实际案例,帮助企业顺利完成数字化转型。
485 12
数字化转型的关键工具:甘特图的应用与优势
|
机器学习/深度学习 自然语言处理 数据可视化
开箱即用!智能文档处理“百宝箱“
10 月 24 日至 26 日,CSDN 第五届“1024 程序员节”在长沙召开。合合信息的常扬老师分享了智能文档处理“百宝箱”,包括 TextIn ParseX、acge-embedding 和 markdown_tester 三种工具。这些工具解决了文档解析中的版式复杂、解析错误、语义信息丢失等问题,适用于文字工作者和机器学习研究人员。TextIn ParseX 是一个可视化工具,支持多种格式输出,acge-embedding 模型用于文本向量化,而 markdown_tester 则用于文档解析效果的定量评估。
375 0
|
NoSQL Java Redis
认证服务---整合短信验证码,验证码倒计时,验证码防刷校验 【一】
这篇文章介绍了如何在分布式微服务项目中整合短信验证码服务,包括使用阿里云短信验证接口、将短信验证功能集成到第三方服务中、其他服务的远程调用,以及通过Redis实现验证码防刷机制的代码实现和遇到的问题解决方案。
|
机器学习/深度学习 数据采集 人工智能
【AI 生成式】生成式 AI 中变分自动编码器 (VAE) 的概念
【5月更文挑战第4天】【AI 生成式】生成式 AI 中变分自动编码器 (VAE) 的概念

热门文章

最新文章

下一篇
开通oss服务