风篁 阿里开发者 2023-06-29 09:01 发表于浙江
(资料图片仅供参考)
阿里妹导读
每个程序员都会讨厌两件事情,阅读没有注释的代码,给代码写注释。那么如何一次解决两大难题,不用写注释,也不会被他人吐槽没有注释呢?
\"If our programming languages were expressive enough, or if we had the talent to subtly wield those languages to express our intent, we would not need comments very much—perhaps not at all.\"
-- Robert C.Martin 《Clean Code》
若编程语言足够有表达力,或者我们长于用这些语言来表达意图,那么我们就不那么需要注释,甚至根本不需要。
程序猿说要有代码,于是代码和注释就一起诞生了。有一句名言,每个程序员都会讨厌两件事情,阅读没有注释的代码,给代码写注释。
毕竟,人与人的悲欢并不相同,我只觉得你写的代码一团糟。如何一次解决程序猿的两大难题,不用写注释,也不会被他人吐槽没有注释呢?
为什么要减少代码中的注释量呢?
注释的存在说明当前的这段代码逻辑并不是特别清晰,没有额外说明,他人就可能无法理解意图。 注释很难得到维护,一个任务开发结束后,分布在任务中的注释大概率就不会再被更新,随着时间的推移,代码越来越复杂,可能注释的信息早已不能准确反馈当前的逻辑了。 减少注释的过程也是一个重新审视代码结构,精简代码的过程。那么糟糕的注释有哪些,又有什么办法可以干掉这些注释呢?
1.废话式注释
后端不能信任前端传入的任何信息,所以写代码的时候,也不能信任旁边同学的任何能力。哪怕最简单的操作,也要增加一段注释来说明操作的细节。
public void addInfo(Info info){ ... //向信息列表中追加信息内容 this.infoList.add(info); ...}相信你的同学的能力,常见的操作,即使没有注释,也能够通过上下文理解出你的意图的。
2.絮絮叨叨的注释
代码逻辑太绕,为了防止它变成上帝的小秘密,那就写上一段注释,这样就不会变成上帝的小秘密了。
public void addInfos(Listinfos){ ... //如果Infos没有,就直接返回,如果Infos只有一个,那就删除数据库的信息,再写入。。。 ...} 看似有了注释,再也不担心变成上帝的小秘密了。但是一旦离注释较远的少量代码被修改,则会导致上帝重新独享这段代码的秘密。
\"Comments Do Not Make Up for Bad Code\"
-- Robert C.Martin 《Clean Code》
注释并不能优化糟糕的代码
复杂的注释说明可能本身代码的逻辑是可能有问题的,整理逻辑图并重新梳理状态机的模型,可能比写出复杂的注释更有意义。从左边的七种可能的通路,多种执行的策略,到右边的清晰简单的二级判断+执行流程,状态及变化清晰简单。
3.代替代码分层的注释
开发框架讲究高内聚,松耦合。所以我的函数也要高内聚,能写在一起的函数,坚决不分开成多块的函数。为了避免有人理解不了这段代码的逻辑,那就加上注释好了。
// 判断是否活跃用户if((customer.getLastLoginTime().after(dateUtils.minusDays(new Date(),15)) && customer.getCommentsLast30Days() >5) || orderService.countRecentDaysByCustomer(customer,30) >1)不合理的分层一方面增加了多余的注释,而且也让整个代码维护性变高。如果判断活跃用户的逻辑发生变化,岂不是需要Ctrl+F去查找全文,一旦漏了一个地方,bug就由此产生了。
合理的函数抽提可以加强代码的逻辑性,与其看见复杂的布尔计算,isXXX才是我的最爱。
private boolean isActivate(){ return getLastLoginTime().after(dateUtils.minusDays(new Date(),15)) && getCommentsLast30Days() >5) || orderService.countRecentDaysByCustomer(this, 30) >1)}if (customer.isActive()){ ...}4.不知所云的注释
为了让上帝更快的独享代码的秘密,所以连注释也快速投奔了上帝秘密的怀抱。
public synchronized void setFormatter(Formatter newFormatter) { checkPermission(); // 检查是否空指针 newFormatter.getClass(); formatter = newFormatter;}这儿的注释,看起来无论如何都不能和后面的代码所联系起来。但是java提供的函数 Objects.requireNonNull()能够比作者使用的的getClass方法更加清晰的说明检查空指针的意图,同时也能干掉这种不知所云的代码。与之相似的还有Collections、StringUtils下面的一系列函数。
虽然前面吐槽了这么多糟糕的注释,以及针对这些注释的无注释方法,但是正如ChatGPT的回答:
写出没有注释的代码是一项挑战,因为注释可以帮助读者理解代码的目的和工作原理。以下是一些编写没有注释的代码的建议:
1.保持代码简洁:简洁的代码易于理解,使其更容易阅读和理解。
2.使用描述性的名称:使用描述性的变量和函数名可以帮助读者理解代码的目的。
3.遵循一致的编码风格:使用一致的缩进、空格和命名约定可以使代码更加易于阅读。
4.将代码分解成小块:将代码分解成小块可以帮助读者理解代码的目的和功能。
5.编写自描述的代码:编写自描述的代码可以帮助读者理解代码的目的,例如,使用有意义的变量名和函数名。尽管这些技巧可能会帮助你编写更容易阅读的代码,但是注释仍然是编写高质量代码的重要组成部分。当您必须编写没有注释的代码时,请尽可能遵循这些建议。
虽然无注释的代码也许终不可得,但是通过减少注释,审视我们的代码结构,让代码晚一日成为上帝的小秘密,那也是非常值得的啦。
标签:
上一篇 : 方程豹/理想MEGA/特斯拉Model 3领衔 下半年新能源车聚焦
下一篇 : 最后一页
风篁阿里开发者2023-06-2909:01发表于浙江阿里妹导读每个程序员都会讨
技术联盟 07-01 20:55:58
相比2022年车市的“颓废”,23年上半年可以说是复苏的状态。秦PLUS冠军
搜狐科技 07-01 20:04:06
抄写作文网小编为大家提供传统文化有哪些古诗3 关于中华传统文化的古诗
抄写作文网 07-01 18:18:51
中国报告大厅2023年7月1日丙二醇甲醚价格最新走势监测显示:济南恒通化
报告网 07-01 17:20:20
酸铜与氢氧化钠反应化学方程式,硫酸铜这个问题很多朋友还不知道,来为
互联网 07-01 15:58:22
清廉共推进车谷校园清风习习---6月30日,“廉洁扬正气清风育桃李”2023
荆楚网 (湖北日报网) 07-01 14:47:17
截至目前,中原银行18个市分行全部入驻阿里资产平台,累计发拍项目2000
互联网 07-01 13:42:15
6月30日下午,省长王清宪与中科曙光信息产业股份有限公司总裁历军一行
安徽新闻网 07-01 12:25:16
00:28封面新闻记者邹阿江摄影报道6月30日,第十九届西博会成都国际商贸
封面新闻 07-01 11:15:13
根据陈佑先、张旺宝同志的辞职请求,按照《咸宁市人民代表大会常务
咸宁网 07-01 10:10:36
这份工作也许是老友皮尔洛介绍的,因为皮尔洛是这支队伍的前任,目前他
运动帮 07-01 09:18:55
据外媒Kotaku消息,于2013年发行的《刺客信条4:黑旗》正在被育碧制作
游民星空 07-01 08:39:51
6月29日,路透社援引知情人士消息指出,人工甜味剂阿斯巴甜或将于今年7
界面新闻 07-01 07:41:32
【法国部署45000名警察和宪兵应对持续的骚乱】法国内政部当地时间6月30
中钢网 07-01 06:57:15
HICOOL2023全球创业大赛医药健康赛道初赛开启---中新网北京6月30日电今
中国新闻网 07-01 05:54:18
幼儿音乐教育,儿音乐教育的基本详情介绍很多人还不知道,那么现在让我
互联网 07-01 04:35:28
广东思埠集团有限公司,简称“思埠”,是集批发零售商场、经销商服务管
互联网 07-01 02:11:29
1、ALT+D+F+F。2、试试。本文就为大家分享到这里,希望小伙伴们会喜欢。
互联网 07-01 00:59:06
医渡科技晚间发布截至2023年3月31日止财年的年度业绩,2023财年公司实
DoNews快讯 06-30 22:41:57
相信目前很多小伙伴对于精工手表都比较感兴趣,那么小编今天在网上也是
互联网 06-30 21:14:22
映象网讯(大象新闻记者黄向阳通讯员段坤杰王琦)泌阳县禁毒办于6月25
映象网 06-30 19:59:59
近期,国产第一人称射击游戏《边境》在Steam平台上的在线人数不足百人
中关村在线 06-30 19:03:46
今年以来,浙江省江山市水利局驻营商办窗口积极践行“靠前一步、主动作
中国网 06-30 18:02:40
对于无线宽带上网费是什么意思这个问题感兴趣的朋友应该很多,这个也是
互联网 06-30 16:55:06
【无糖可乐不能喝了?或含致癌物】身材管理人士这两天焦虑了,因为“快
金羊网 06-30 16:05:43
第三届中非博览会永州陆港招商推介会在长沙举行分享永州发展机遇共谱事
湖南日报 06-30 15:08:14
西安财经大学行知学院有哪些重点学科和专业是广大考生和家长朋友们十分
中国招生网 06-30 14:03:36
贵宾犬一种受欢迎的宠物犬,贵宾犬的毛色和花纹非常丰富,其中一些稀有
哔哩哔哩 06-30 13:31:20
直播吧6月30日讯据《东方体育日报》消息,中国女足计划于7月6日前后启
手机网易网 06-30 12:33:09
可以结合自然区划、人文区划和行政区划的科学方式选择出典型村庄,体现
环球网 06-30 11:57:12
分时图快速拉升意味此时存在大单买入,在大单的推动下,股价快速地上涨
自选股智能写手 06-30 10:42:14
近日,全国多家高校发布公告称,自7月1日起,因微信支付收取高达0 2%-0
北京青年报 06-30 10:03:19
格隆汇6月30日丨海伦哲(300201 SZ)近期在接待机构调研时表示,由于连硕
格隆汇 06-30 09:47:57
美国哈佛大学、北卡罗来纳大学被控招生时歧视亚裔和白人学生一案,美国
星岛环球网 06-30 09:00:27
国足选拔队尽管是二队,但也备受外界关注,一方面,这支球队将参加下个
淡看浮生繁世万千 06-30 08:25:08
相信目前很多小伙伴对于进口关税都比较感兴趣,那么小搜今天在网上也是
互联网 06-30 08:01:48
来为大家解答以上问题,dx11 2,dx11 1官方下载很多人还不知道,现在让
互联网 06-30 07:11:51
1、自问自答?。
科学教育网 06-30 06:09:41
据了解,本次展览由四川、陕西、湖北、贵州四省女摄影家协会及重庆女性
上游新闻 06-30 04:58:23
防水补漏不砸砖怎么处理如果只是轻微的漏水,选择用防水材料来处理,利
互联网 06-30 02:22:36
hello大家好,我是价值网小科来为大家解答以上问题,外来妹全集播放,
互联网 06-30 00:41:00
6月29日,海关总署在第三届中国-非洲经贸博览会期间,首次发布“中国
中央广电总台央视新闻客户端 06-29 22:46:28
同花顺金融研究中心6月29日讯,有投资者向宁波东力提问,请问贵公司行
同花顺iNews 06-29 21:45:10
丹布罗西奥将在月底合同到期后离开国米,在社交媒体中,他发文对国米进
直播吧 06-29 20:57:24
【 顾客起诉比格比萨获赔1元 】企查查App显示,近日,周某与某外卖平台
互联网 06-29 19:53:45
来为大家解答以上的问题。地热能是什么原理,地热能是什么这个很多人还
互联网 06-29 18:56:14
2023年06月29日,新能源汽车受到利好消息的刺激下,整个板块掀起了涨停
大数据复盘 06-29 17:52:05
正在山东济南举办的第七届全国残疾人职业技能大赛赛场上,有一对夫妻选
央视新闻客户端 06-29 17:17:38
文 医学界宽敞舒适的环境、星级的服务,优质的就医体验,按照三级妇儿
中国网财经 06-29 16:45:11
紫金银行(601860)06月29日在投资者关系平台上答复了投资者关心的问题。
证券之星 06-29 16:34:01
风篁阿里开发者2023-06-2909:01发表于浙江阿里妹导读每个程序员都会讨
技术联盟 2023-07-01
相比2022年车市的“颓废”,23年上半年可以说是复苏的状态。秦PLUS冠军
搜狐科技 2023-07-01
抄写作文网小编为大家提供传统文化有哪些古诗3 关于中华传统文化的古诗
抄写作文网 2023-07-01
中国报告大厅2023年7月1日丙二醇甲醚价格最新走势监测显示:济南恒通化
报告网 2023-07-01
酸铜与氢氧化钠反应化学方程式,硫酸铜这个问题很多朋友还不知道,来为
互联网 2023-07-01
Copyright © 2015-2022 纵横纤维网版权所有 备案号:浙ICP备2022016517号-12 联系邮箱:51 46 76 11 3 @qq.com