本文转载自微信公众号《Java极客技术》,作者鸭血范。转载本文请联系Java极客技术公众号。昨天,队里有个妹子突然找阿芬说说怎么写出好的代码。阿芬本着负责任的态度,专门写了一篇文章。女孩,我只想被宠坏。写注释和写代码的事情,大概是编程一段时间的事情。之后就有了调试火葬场阿芬的经历。当时开发任务紧,功能实现后工作就结束了,评论也没写好。结果过了两三个月,因为需求的变化,那个功能出现了bug,我就去解决了。羽又理了一遍,味道真是酸酸爽口,所以阿芬就把这个建议放在第一位了!写注释的时候,如果逻辑比较复杂,可以先写大体思路,具体实现在下面写的比较详细,比如阿芬写的代码(已经脱敏,请勿拍太认真了,重点是阿芬写的评论/***执行XX操作时调用此方法向数据库插入数据*@paramsaveModel要插入的数据*@return是否保存成功**@authora'fen*@date2020-10-1723:50:45*/publicBooleanisSaveSuccess(SaveModelsaveModel){/*总体思路:1接收所有传入的ids/Name信息2插入相关信息2.1XX信息插入成功后,去YY表插入相关信息3插入YY表时,先判断是否有相关信息,有则更新,没有则直接插入4是否添加AA,如果业务上配置了AA,则需要更新相关内容为ZZ表注意:当您单击接下来在BB界面,相关信息已经插入到ZZ表中,所以这里只需要更新一下即可*///1接收所有传入的id/name信息//创建xxList接收所有id/name信息ListxxList=newArrayList<>();//根据id对传入的信息进行排序,方便下一步操作saveModel.getIdList().stream.collect(Collectors.groupingBy(SaveModel::getId)).forEach((StringmapKey,List保存)->{xxList.addAll(保存);});//2插入相关信息//循环xxListfor(XXModelmodel:xxList){//向XX表插入信息实现代码//2.1插入成功,去YY表做相关信息插入实现代码}//3插入YY时table,首先判断是否有相关信息,有则更新,没有则直接插入实现代码//4是否添加AA,如果业务中配置了AA,则需要将相关内容更新为ZZ实现表格中的代码}在编写代码之前,先想好可能的应用场景。有时候拿到需求后,急着去做,后期可能会耗费很多精力,阿芬拿到这个需求的时候,还以为只是充值钱,就定义了一个Integer类型就完事了,然后操作就猛如虎,上线之后就没问题了。结果有一家公司运营和其他一些第三方合作使用了充值接口,因为大规模的持续充值,直接超出了Integer的允许范围,导致整个业务的失败线运行。是的,而且是某种数据类型造成的……阿芬当时真的很想挖土。代码是写给人看的,所以要让你的代码干净整洁。你觉得机器能读懂吗?如果要让机器读取,直接写0110001不是很好吗?毕竟机器只认0或者1,所以代码是写给人看的,所以在写代码的时候,要让它干净整洁,比如:缩进要缩进,空行要留空,如下所示:publicstaticvoidsleep(longmillis,intnanos)throwsInterruptedException{if(millis<0){thrownewIllegalArgumentException("timeoutvalueisnegative");}if(nanos<0||nanos>999999){thrownewIllegalArgumentException("nanosecondtimeoutvalueoutofrange");}if(nanos>=500000||(nanos!=0&&millis==0)){millis++;}sleep(millis);}来缩进缩进吧,有空行就空一行。你不需要自夸。我觉得这段代码真的很好!(谁敢说Thread源码不好?!跟阿粉聊聊源码没问题,其实我是想亲手写的,好代码最重要的是阅读more.写多了看什么?阿芬觉得看源码就够了。这么多人都在使用JDK源码,足以说明JDK源码的代码是多么的优秀。自己写代码的时候,多注意从源码中学到的实现思路和编程技巧。久而久之,你一定会在编程方面有很好的提高