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

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

3天内不再提示

写代码不难,难的是写高质量代码!

5RJg_mcuworld 来源:lq 2019-01-22 11:13 次阅读

作为程序员,要有“刨根问底”的精神:知其然,更要知其所以然!

以下为译文:

在如今这个时代,每个人都在努力提升资源能力。在Web应用程序方面,我们有Spring、Play和Struts等框架,这些框架可以帮助我们构建具有可扩展性和可管理性的软件。这些框架提供了许多样板代码,所以你无需在应用程序中再写这些代码。

不过,写代码并不难,但是写高质量的代码却很难。

作为开发人员,在日常工作中我们也应该遵循相同的基本原则。我们应该将工作完成得尽善尽美,不能将任何错误留给客户。很多时候,迫于压力开发人员会编写管理不善或复杂的代码。为了编写高质量的代码,有一条经验法则是写出的代码应该让所有人都能当作短语一样阅读。

写代码时应当牢记的事情

多想少写,在写之前深思熟虑;

遵循最佳实践;

使用SonarQube等代码质量工具,或者如果使用eclipse或IntelliJ等IDE的话,也可以使用Sonar插件(SonarLint),这些都可以轻松入手;

尽量编写通用的代码;

不要自行创建API中存在的isEmpty、isNull或isNotNull等方法,许多有名的开源库(比如Apache)都提供了定义良好的方法;

使用IDE的重构工具,并了解其快捷方式:

publicvoiddoSomething(){Line1....Line2....Line3....Line4....Line5....}

如果你想抽取1-4并创建一个单独的方法。常见的做法是:复制,创建一个方法,然后将复制的行粘贴到该方法中;总共需要3-4步。在做这样的任务时,你可以使用IDE的重构工具(而无需复制粘贴)。

重构工具有许多重要的功能,包括:

将一段代码从一个位置移动到另一个位置;

从其他地方抽取一段代码,然后创建一个方法(如上例所示);

重命名文件,变量或方法,注意,如果你手动做这个任务,那么就需要手动修改所有的地方;

尽量编写正确的测试用例(可选)。

编写类

类名应该是名词,每个单词的首字母都应该大写;

在编写新类之前,搜索项目中是否存在这样的文件。很多时候,我们会发现我们以不同的名称创建了相同的文件,这会误导项目和其他开发人员。例如:

通过类名完整地描述的功能;

使用适当的访问修饰符;

文件的打包也非常重要,把正确的文件放在正确的地方,不要把常量文件放在util包等错误的地方,正确的地方应该是常量或元数据。

编写方法

方法是动词,所以名称应该采用驼峰式命名法,例如doWhatToDo(),而非doWHatTODO();

一个方法不应该超过30行,如果超过30行则说明过于复杂;

在定义方法之前认真考虑,方法应该具有某些含义,或者应该为特定的任务服务,例如createPerson或sendMail;

一个方法不应该同时执行多个任务,如果方法名为createPerson,那么就应该只创建一个人,不应该再做别的任务。很多人会这样做:

publicLongcreatePerson(PersonVOpersonVO){1.Appointmentappointment=tryingtogettinganappointmentfromDB.2.thenperformingifelseovertheresultofappointment.....14.thenupdatingsomethingonthebasisofsomecondition.15.thenfinallycreatingperson.}

很多时候方法都超过了这个限制,开发人员在一个方法中编写100-300行代码,最后只会让代码面目可憎且难以理解。

引发的问题包括:

无法理解代码流;

调试问题;

测试问题;

解决一个bug需要很长时间。

解决方法:

将其他任务转移到别的方法中;

提取方法中的有效代码,然后调用其他方法。

所以,这段代码应该像下面这样:

publicLongcreatePerson(PersonVOpersonVO){appoitnmentValidation();updatingSomething();creatingpersoncode;}

编写变量

变量名应该采用驼峰式命名法,例如isTrue、userService、personName以及localServiceRerpository;

不应该使用一个字符的名称,除非在临时情况下;

不应该以_和$开头;

在定义变量名之前认真考虑;

不要使用大写。

编写常量

尽量通过类来定义常量,而不是接口

定义final类;

在常量类中创建一个私有构造函数,确保没人可以创建实例;

如果你整个服务都会使用唯一的一个常量文件,那么最好通过注释来分段,如下所示:

/****Cache****/publicstaticfinalStringCACHE_NAME="personCache";/****Attributes****/publicstaticfinalStringNAME="name";publicstaticfinalStringMOBILE="mobile";/****Configuration****/publicstaticfinalStringAPP_NAME="PersonDemo";publicstaticfinalStringAPP_VERSION="1.0";

如此可以方便搜索整个文件。

常量名应该非常具体,应该全部使用大写,并利用下划线来分割,例如APP_NAME,而非appName。

编写逻辑

避免使用多个嵌套的If else,这会增加代码的循环复杂度;

尽量编写通用的代码;

不要仅仅利用log来记录异常,应当抛出正确的消息或异常,而不是只输出异常。

什么是“通用代码”?

在很多项目重构的时候,我们都会发现一些本不应该存在的冗余代码。

假设我们有一个邮件草稿的POJO类,它的成员会在发送邮件时被使用。那么,发送邮件所需的步骤有哪些?

我们需要通过设置数据来创建一个POJO对象;

我们需要编写发送邮件的代码。

那么最终的代码行数为:

对象创建——1行:

MailDraftmailDraft=newMailDraft();

设置数据——3行:

mailDraft.setTo();mailDraft.setBody();mailDraft.setMessage();

发送邮件的逻辑至少需要4行,所以总共有9-10行代码。

如果我们需要在多重条件或事件中发送邮件,那么情况会怎样?我们需要相同的逻辑,而且通常我们会发现开发人员在每个地方都重复了相同的步骤,并创建一个拥有某些特定代码的方法,于是冗余开始层层叠加。

但是,如果我们将创建草稿和发送邮件的代码提出来,放到另一个方法中,那么每个方法都可以调用这段代码,于是每个方法都省却了10行代码,我们就无需一次又一次地重复这段代码了。

不要匆匆忙忙地赶代码。如果情非得已,那么也要记得加注释:

TODO:需要重构。

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

    关注

    8

    文章

    7030

    浏览量

    89034
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68612
  • 应用程序
    +关注

    关注

    37

    文章

    3268

    浏览量

    57705

原文标题:写高质量的代码,永不言晚!

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分享一些优秀的verilog代码 高质量verilog代码的六要素

    高质量的verilog代码至少需要包含以下几个要素:可读性、功能、性能、标准化、稳定性、可定位。
    的头像 发表于 07-18 10:09 1178次阅读
    分享一些优秀的verilog<b class='flag-5'>代码</b> <b class='flag-5'>高质量</b>verilog<b class='flag-5'>代码</b>的六要素

    何为高质量代码?如何写出高质量代码

    懂得“数据结构与算法” 写出高效的代码,懂得“设计模式”写出高质量代码
    发表于 08-02 09:44 843次阅读
    何为<b class='flag-5'>高质量</b>的<b class='flag-5'>代码</b>?如何写出<b class='flag-5'>高质量</b><b class='flag-5'>代码</b>?

    编写高质量C语言代码

    编写高质量C语言代码 编写高质量C语言代码 编写高质量C语言代码
    发表于 07-31 17:47

    高质量c语言高级教程

    。这些软件频频获奖,有一个软件获得首届中国大学生电脑大赛软高质量 C++/C 编程指南,v 1.0 2001 Page 7 of 101件展示一等奖。在 1995 年开发的一套图形软件库到 2000
    发表于 01-07 11:16

    高质量编程

    干货,《495个C语言问题》、《华为内部程序设计编码规范》、《C语言:陷阱和缺陷》、《高质量C编程[林锐]》
    发表于 02-27 19:39

    10个嵌入式小技巧 教你写出高质量代码

    由于物联网的发展,现在没人不知道嵌入式系统了,加上身边也有很多嵌入式的设备,所以这也让大家开始都转入到嵌入式门下,那么因为嵌入式毕竟是技术,所以下面也来给大家介绍下10个嵌入式技巧,教你怎么高质量
    发表于 12-20 16:19

    高质量代码的设计特点

    高质量的设计往往有一些共同的特点。如果你能达到这些对象,那么可以认为你的设计也是非常成功的。有些对象是互相矛盾的。但是这是设计的挑战所在,在相互矛盾的对象之间做出
    发表于 07-19 15:15 0次下载

    微软四大名著之编程精粹:编写高质量C语言代码

    c语言有些比较冗杂,要想编出一些高质量的c语言代码,需要思想来指导,才能更好写代码
    发表于 04-20 10:50 0次下载

    怎样来为armc代码

    怎样来为armc代码
    发表于 10-30 10:32 12次下载
    怎样来为arm<b class='flag-5'>写</b>c<b class='flag-5'>代码</b>

    高质量Verilog代码有什么特点

    高质量的verilog代码主要包含以下几个要素:可读性、功能、性能、标准化、稳定性、可定位。
    发表于 03-30 10:12 1950次阅读
    <b class='flag-5'>高质量</b>Verilog<b class='flag-5'>代码</b>有什么特点

    如何编写高质量的Javascript代码

    这篇文章不仅仅从代码本身来考虑如何优化编码,也从代码的设计阶段来考虑,包括书写API文档,同事的review,使用JSLint。这些习惯都能帮助你编写更加高质量的、更易于理解的、可维护的代码
    发表于 01-21 14:28 7次下载
    如何编写<b class='flag-5'>高质量</b>的Javascript<b class='flag-5'>代码</b>

    程序员是怎么代码的?常见问详解

    腾讯程序员是怎么代码的?,代码,插件,sql,调用,编程
    的头像 发表于 02-20 15:38 9694次阅读

    qt用C++的2048小游戏源代码

    qt用C++的2048小游戏源代码
    发表于 09-27 11:48 1次下载

    阿里云内部全面推行AI代码

    阿里云正在内部全面推行 AI 编程,使用通义灵码辅助程序员代码、读代码、查 BUG、优化代码等。
    的头像 发表于 04-07 09:22 561次阅读

    如何提升代码质量与效率的秘诀

    提高编程能力其实没有捷径,最佳方式就是多代码。 不过,除了大量代码,提升编程能力还需要大量阅读别人
    的头像 发表于 04-28 14:53 398次阅读
    如何提升<b class='flag-5'>代码</b><b class='flag-5'>质量</b>与效率的秘诀