程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。

但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?

昨夜,闲情雅致,瞅了瞅隔壁小王的代码,看完之后真是太上火,气不打一处来。

于是,把小王犯的错误拉了个清单,一起帮他改进一下,顺便看看这些坏习惯,你是否也有呢?

1.

过度相信别人,会给自己挖坑。

针对接口输入参数,没有进行严格校验,尤其是要插入数据库库的参数,一路透传到底(数据库层面),数据库就报数据插入异常。

对于调用者而言,会一直等待接口响应,而最后拿到数据库错误,会一脸懵 B;对于接口本身而言,会占用数据库连接,损耗资源,如果并发量大的情况,影响可想而知。

建议:业务代码研发过程中,不要相信调用者会按照要求传参数,要做到防御性编程。

2. 

异常捉都捉啦,就差一哆嗦。

2.1. 抓住了异常,却什么都没做!

2.2. 打印异常栈的方式,却显得毫无意义。

估计很多人,都会这么写,但是在生产上,却显得意义不大,所以最好用记录日志的形式输出异常信息。

建议:业务代码研发过程中,针对接口中发生的异常,既然进行了 catch,那就一定要好好封装处理,若不做任何处理,私自把异常给吞没了,一旦线上出了问题,却不知道问题出在了哪里。

3. 

小儿科的问题,会大意失荆州。

3.1. 代码这么写,还谈什么用户体验?

例如,用户绑定银行卡场景,判断银行卡是否已经绑定,未绑定则进行绑定。

循环遍历用户绑定的银行卡列表,然后比较传入的卡号(cardNo)是否已经绑定过,当传入的卡号与绑定的卡号一致时,修改 hasCard 为 true,并没有跳出循环,继续下一次比较判断。

那么,如果类似这种代码,发生在数据量比较大的场景下,势必会降低性能,过度浪费资源,用户肯定会骂街。

建议修改方式(仁者见仁智者见智):

3.2. 数据挨个去处理,怎么还出现了漏网之鱼?

例如,三方数据对账时,判断三方传过来的数据在本地状态是否正常匹配,把没匹配的数据进行注销处理。

代码这么写,一旦条件匹配,进行删除某条记录后,list 的大小发生了变化,而 i 的值也在变化,就会导致在遍历的时候,漏掉某些记录。

比如,当删除第 1 个元素后,继续根据索引访问第 2 个元素时,因为删除的关系,后面的元素都往前移动了一位,所以实际访问的是第 3 个元素。

建议采用 Iterator 删除,或者集合倒序遍历删除。

3.3. & 与 && 的使用不当,终酿错。

例如,在 Web 项目中,判断输入的邮箱是否为空。

当 email 输入为 null 时,& 使用时,后面的条件会发生空指针异常。

建议修改为:

同样,|  与 || 也有类似的情况,所以在使用时,也要注意此类场景的问题。

3.4. equals 比较,搞不好会出幺蛾子。

当 resMap.get(Global.RETCODE) 为 null 时,会发生空指针异常。

鉴于 Object 的 equals 方法容易抛空指针异常,所以业务研发中,应使用常量或确定有值的对象来调用 equals。

建议修改为:

3.5. 数学运算,搞不好会倾家荡产。

输出结果:0.010000000000005116,一般遇到需要用到浮点数运算的地方,都可以使用 java.math.BigDecimal。

建议修改为:

注意构造 BigDecimal 的参数为 String,千万别搞错了,这也是新手易犯的问题。

3.6. 奇葩的注释,看到就想骂街。

3.6.1. 项目中的某类的注释。

代码的作者是管理员,敢问,管理员 TM 又是谁?而且源文件有过修改,但是修改描述的是啥?着实让人费解!

3.6.2. 项目中的某方法的注释。

方法参数没有解释;方法返回值没有解释;作者又是属于管理员;修改描述描述的是个啥?

4.

让代码会说话。

4.1. 避免江边卖水。

4.1.1. 业务接口验签代码片段。

红色圈住部分,感觉有点江边卖水,多此一举。那么,可以去掉 false 判断,建议修改如下:

同样的,代码研发中,true 的判断也一样可以去掉。

4.1.2. 用户登录代码片段。

最后的 else 有点多此一举,可以省略,可以修改为:

4.1.3. 用户是否绑定银行卡片段。

在 return 前的判断,貌似略显多余,可以修改为:

4.2. 减少 Bug,减少圈的复杂度。

(图片来源于网络)

会发现嵌套层数越多,代码越复杂,其圈复杂度也就可能越高。不过,控制嵌套层数,便是降低 Bug 发生概率的一个有效手段。

例如,下面的代码片段,项目中可谓是一抓一大把。

根据场景,可以适当调整如下:

4.3. 统一作战,代码未动,规范先行。

为了让写出的代码能够清晰阅读,前提是团队要进行统一,不能为了个人嗜好,而独创研发秘笈。

敢问,有哪些需要进行统一呢?

统一的开发环境(JDK版本、集成开发工具 IDE、存放目录...);

统一的开发框架,更多精力集中到业务开发上;

统一的开发模板,开发工具要进行统一 Scheme;

统一的开发规约,命名、注释、代码结构等约束;

统一的 DB 规约,具备一个良好的标准。

统一的 ... ...

5.

代码评审的过程,会让人哭笑不得!

铁打的营盘流水的码农,你的代码迟早会被其他同事接手,为了让接手你代码的同事,心里不默默骂你,建议还是好好对待编码这件事,认真写好每行代码。

写代码是一件快乐的事情,评审代码更是一件有趣的事情,通过评审代码,能够相互学习,并使代码更加健壮,提早发现 Bug,所以每一次都不要错过。

最后,本次分享就到这里,希望你们能够喜欢。

原文地址:https://www.cnblogs.com/socoool/p/12629720.html

时间: 2024-08-04 16:06:35

程序员写出这样的代码,能不挨骂吗?的相关文章

幸福村站——成都传智播客程序员写出你的烧烤代码

又是一个阳光明媚,风和日丽之天,如果作为程序员的你还在键盘上苦苦的想着下一串代码该怎么写的话,那你就弱爆了.俗语说得好,学习要劳逸结合,写代码更是需要清晰的思维,在传智播客Java基础班开班一个月后,班主任决定带着这群"猿猴们"去传说中的"幸福村"放松放松,我们也跟着一起去感受程序员们的烧烤代码的幸福吧! 带着好奇的心理走进了"幸福梅林站",一个又一个的农家乐园开始浮现在我们眼前,那里朴素的民风和美丽的风景让我们暂时忘却了学习上的烦恼和城市里的喧

导致程序员写出烂代码的35个恶习,看看你染上了几个?

IT行业的科技公司们一直苦苦追寻传说中以一当十的超级程序员,最新的研究表明确实存在这样一小撮效率奇高的"程序金刚",但是一位普通程序猿如何能够蜕变成代码金刚呢? 国内外的各大专家总结了导致程序猿效率低下,代码为什么像坨shi一,样难以维护的35条恶习(归为代码组织.团队工作.写代码.测试与维护四大类). 代码组织 1.总是说"一会弄好",但从来不兑现.(缺乏任务管理和时间管理能力) 2.坚持所谓的高效.优雅的"一行代码流",事实上,可读性才是最重

程序员写 2000 行 if else?领导:这个锅我不背

前言 知乎上有小伙伴提了这么一个问题,如何看待陕西省普通话水平测试成绩查询系统?查询系统前端代码就直接给出了身份账号,姓名,证书编号,如果信息是真的,就泄露了这么多考生的信息,白给那种.为什么会发生这样的事情?事情的始末是什么? 证据 很多机智的小伙伴都打开了网址一探究竟,小编也不敢怠慢赶紧瞅瞅这牛逼的网站到底长什么样子. 看着的确有模有样,一股80年代的复古风格,赶紧拿出 F12 神器看一遍究竟哪位程序员写出如此神奇的逻辑代码. 点开层层结构,找到 <script>,卧槽还有这等神逻辑,本地

小白程序员怎么由量变到质变写出高质量代码

小白程序员怎么由量变到质变写出高质量代码?很多老程序员从事开发多年,有这样一种感觉,查看一些开源项目,如Spring.Apache Common等源码是一件赏心悦目的事情,究其原因,无外两点: 1.代码质量非常高; 2.命名特别规范: 要写高质量的代码,不是一件容易的事,需要长年累月的锻炼,是一个量变到质变的过程,但要写好命名,只需要有比较好的英语语法基础和一种自我意识即可轻松达到. 1.切忌使用没有任何意义的英语字母进行命名. 2.切忌使用拼音,甚至是拼音首字母组合. 3.要使用英文,而且要使

汇道科技:如果以后程序员写不动代码了怎么办?

最近汇道科技办公室关于"程序员写不动代码了怎么办?"引发了很多人的讨论,一开始讨论的对象只是"当事人"程序员们,后面到各行各业,同时大家讨论的几个点也引人深思: 1.35岁写不动代码了怎么办?  你不得不承认,对于新事物的兴趣在下降,就如同不再有见漂亮姑娘时的小兔乱撞,就如同不再有见到梦想时的热血跌宕.就是如此尴尬的一个年龄,偏偏又生在互联网,这个到处都是常青藤生产线的艺术品,不比资历只比朝气的行业. 首先小编认为35岁并不是一个很可怕的年纪,三十而立,三十五岁正当

出错的方法有可能是JDK,也可能是程序员写的程序,无论谁写的,抛出一定用throw

应对未检查异常就是养成良好的检查习惯. 已检查异常是不可避免的,对于已检查异常必须实现定义好应对的方法. 已检查异常肯定跨越出了虚拟机的范围.(比如"未找到文件") 如何处理已检查异常(对于所有的已检查异常都要进行处理): 首先了解异常形成的机制: 当一个方法中有一条语句出现了异常,它就会throw(抛出)一个例外对象,然后后面的语句不会执行返回上一级方法,其上一级方法接受到了例外对象之后,有可能对这个异常进行处理,也可能将这个异常转到它的上一级. 对于接收到的已检查异常有两种处理方式

如何写出无法维护的代码

如何写出无法维护的代码 酷壳里有很多我觉得很不错的文章,但是访问量最大的却是那篇<6个变态的Hello World>,和它能在本站右边栏“全站热门”中出现的还有“如何加密源代码”,以及编程真难啊等这样的文章.可见本站的读者们的偏好,我也相信你们都是“身怀绝技”的程序员.所以,今天给大家推荐这篇文章,相信一定能触动大家的兴奋点. 这篇文章的原文在这里(http://mindprod.com/jgloss/unmain.html),我看完后我想说—— 什么叫“创造力”,创造力就是——就算是要干一件

不要把时间浪费在写出完美的代码

一个系统可能会持续工作5年,10年,20年甚至更长的时间.但是具体到这个系统中的某一行代码,即使是关于设计的部分,这一行代码存在的时间却会很短:几个月或者几天,甚至是几分钟. 一些代码比其他代码更重要 通过研究代码是怎么随时间改变的,Michael Feathers定义了一条代码变动曲线.每个系统都有很多写完之后就不再改变的代码.与此同时,也存在少量这样的代码,这些代码是整个系统最重要也是最有用的代码,它们会随时间一次又一次地改变.重构,或者被删除,重新来过,如是反复几次. 随着你对一个系统越来

程序员,千万不要重写代码

如果你跳槽.或刚接手一个新项目,面对看上去异常混乱的旧代码,请冷静下来,忍住推倒重写的冲动. 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来.是的,他们决不会满足于简单的增量劳动. 或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补,他们认为旧代码简直一团糟. 但是,事实上真是这样吗?你之所以认为旧代码一团糟,其实是由编程的一个基本定律决定的,那就是:写代码容易,读代码难. 为什么你觉得旧代码异常混乱?因为读