代码注释,是程序员的美德还是无能的表现?

image

前言

嗨,大家好!

今天咱们来聊聊一个老生常谈但又永远不过时的话题 —— 代码注释。

你是不是也经历过这样的时刻:打开一段陌生的代码,就像进入了迷宫一样找不到北?这时候,一个好的注释简直就是你的指路明灯啊!但话说回来,注释真的那么必要吗?还是说,它有时候反而会变成累赘?今天我们就来深入探讨一下这个问题。

注释的传统观念与好处

在编程的世界里,注释的起源非常早,我甚至已经查阅不到注释的由来,但现在任何一种语言,甚至几乎任何一种文本格式都支持各式各样的注释形式。

过去,写代码时加上注释被认为是编程的基本步骤之一,写注释被视为是一种编程美德。不管是在学校,还是在职场,老师或前辈们总是不厌其烦地反复强调:“好的注释能让代码更容易理解和维护。”

毕竟,不是每个人都是天才,能够一眼看懂几百行甚至几千行代码。

很多用心良苦的程序员们通过注释,努力让同事和未来的自己更容易理解代码的意图。

这些注释就像一位友好的向导,帮助他人更轻松地走过复杂的代码迷宫。

总结一下,写注释至少有以下3个好处:

  1. 理解业务逻辑和理清编码思路

    我觉得这是写注释最大的好处,特别是在处理复杂的业务逻辑时,你可能会一时难以理解业务需求和设计思路,这个时候,就可以尝试在空白的方法体内,写下你的思路和步骤,这不仅是一种注释,更是理清思路的好方法,如下图,我经常这样写着写着,灵感就会油然而生,然后就理清了思路,明白了业务需求的核心所在,知道了之前想法的不足之处等等,这也是我写的代码很少有 BUG 的原因之一。

  2. 团队协作

    在一个团队中,良好的代码注释是程序员之间沟通的重要工具,它可以让新加入的成员更快地上手,也能让代码审查变得更为高效。

  3. 代码维护

    想象一下,当一个新的业务需求要加到你很久之前写过的一段代码中,良好的代码注释就像是一份旧时的礼物,帮助你迅速回忆起当初编写这段代码时的原因、目的和逻辑。

代码自表达理念的兴起

尽管代码注释有很多好处,然而,随着时间的推移和软件开发流程的演变,代码注释的弊端也逐渐显现出来,比如 “废话注释” “注释与代码不匹配” “拐杖式注释” 等等。

于是,一些声名显赫的技术大佬开始提倡 “代码自我表达” 理念,他们认为:
当代码足够优秀时,注释则是非必须的,并且需求在不断调整,代码一定会随之变动,但注释可能慢慢被人遗忘,当代码与注释不匹配时,将是更大的灾难,所以好的代码应该是能够自我表达和自我解释的,代码可以通过清晰的命名、结构化的逻辑来传达意图,而不是依赖大量的注释。

比如,《Clean Code》的作者 Robert C. Martin 就是一位注释的极力否定者,他认为给代码加上注释是一种失败,这种行为只能说明程序员在粉饰其糟糕的代码,好的代码都能够自我解释,不需要注释。

Comments Do Not Make Up for Bad Code
– Robert C.Martin《Clean Code》

结论

代码自表达理念听起来确实不错,毕竟,每个程序员的心中都有一个神话传说,叫做 “我的代码像诗一样优雅”。

的确,我们可以通过选择更好的变量名,更准确的类与方法,更合理的继承与派生来减少注释,这样代码看起来就会更优雅。

不幸的是,即便如此,我们仍然有非常多的信息无法直接通过代码来表达,这里的信息,不仅仅只是业务逻辑与技术设计,还包括了我们的观感,我们的体验,我们的接纳程度以及第一印象带来的首因效应。

所以,我觉得写注释还是很有必要的,只不过我们需要更聪明地去做这件事。比如:

  • 适度原则:避免过度注释,专注于那些真正需要解释的部分,比如复杂的业务逻辑、晦涩的算法公式和不明所以的常量等等

  • 及时更新:一旦代码发生变化,注释也应该同步更新,确保信息的准确性和时效性

  • 清晰简洁:注释应该简明扼要,只表达必要的信息,避免冗长和模糊不清的描述

  • 工具辅助:可以利用一些自动化工具来帮助生成和维护注释,减轻人工负担

  • 规范统一:最好能建立一套团队内部的注释规范,确保风格一致,这样可以减少阅读和理解的时间

最后,希望这篇文章能让你对代码注释有些不一样的认知。如果你有更好的想法或建议,欢迎留言讨论!

往期精彩

  1. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  2. 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎关注老杨的公众号,和你共同探索代码世界的奥秘!

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1562183.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

飞机大战ai通过dqn实现

借鉴 飞机大战源码 github 王者荣耀ai训练(试了一下,发现电脑带不动,就改了一点,训练其他游戏) 源码 通过网盘分享的文件:PlaneWar (2).zip [链接](https://pan.baidu.com/s/1N4OorR7b36Zml8MadGmI6g?pwd1234&#xf…

第十六章 RabbitMQ延迟消息之延迟插件优化

目录 一、引言 二、优化方案 三、核心代码实现 3.1. 生产者代码 3.2. 消息处理器 3.3. 自定义多延迟消息封装类 3.4. 订单实体类 3.5. 消费者代码 四、运行效果 一、引言 上一章节我们提到,直接使用延迟插件,创建一个延迟指定时间的消息&…

晶体匹配测试介绍

一、晶体参数介绍 晶体的电气规格相对比较简单,如下: 我们逐一看看每个参数, FL就是晶体的振动频率,这个晶体是24.576MHz的。 CL就是负载电容,决定了晶体频率是否准确,包括外接的实际电容、芯片的等效电容以及PCB走线的寄生电容等,核心参数。 Frequency Tolerance是…

堆排序(C++实现)

参考: 面试官:请写一个堆排序_哔哩哔哩_bilibiliC实现排序算法_c从小到大排序-CSDN博客 堆的基本概念 堆排实际上是利用堆的性质来进行排序。堆可以看做一颗完全二叉树。 堆分为两类: 最大堆(大顶堆):除根…

Deep tone mapping network in HSV color space

Abstract 色调映射算子可以将高动态范围(HDR)图像转换为低动态范围(LDR)图像,这样我们就可以用LDR设备享受HDR图像的信息内容。然而,目前的色调映射算法主要关注亮度映射,而忽略了颜色分量。与此同时,它们经常遭受光晕伪影和过度…

IaaS,PaaS和SaaS的区别讲解

IaaS、PaaS和SaaS有什么区别吗?这三个概念非常简单。 只不过在说它们仨的区别前,有个常识需要知道一下: 我们传统开发一个软件,需要9个东西: 作为使用软件的人,左边的【应用】和【数据】,是离…

Django的请求与响应

Django的请求与响应 1、常见的请求2、常见的响应3、案例 1、常见的请求 函数的参数request是一个对象,封装了用户发送过来的所有请求相关数据。 get请求一般用来请求获取数据,get请求也可以传参到后台,但是传递的参数显示在地址栏。 post请求…

企业内部文档安全外发如何挑选合适的外发系统?

企业文档的外发不仅关系到运营效率,更是信息安全的重要组成部分。面对B2B模式下文档交换的普遍性和重要性,企业内部文档的安全外发成为了众多公司关注的重点之一。 随着互联网技术的发展,企业之间的合作越来越紧密,文档的交流也变…

Java Agent 技术解析

什么是Java Agent Java Agent是在 JDK1.5 引入的一种可以动态修改 Java 字节码的技术。Java 类编译之后形成字节码被 JVM 执行,在 JVM 在执行这些字节码之前获取这些字节码信息,并且通过字节码转换器对这些字节码进行修改,来完成一些额外的功…

第十四章:收尾过程组(14.1结束项目或阶段--14.2收尾过程组重点工作)

14.1 结束项目或阶段 过程定义:终结项目、阶段或合同的所有活动的过程 14.1.1 主要输入 1.项自章程 项目章程记录了项目成功标准、审批要求,以及由谁来签署项目结束 2.项目管理计划 项目管理计划的所有组成部分均为结束项目或阶段过程的输入。 3.项…

【视觉分割新SOTA|论文解读1】一种最先进的图像分割模型——Segment Anything Model (SAM)

【视觉分割新SOTA|论文解读1】一种最先进的图像分割模型——Segment Anything Model (SAM) 【视觉分割新SOTA|论文解读1】一种最先进的图像分割模型——Segment Anything Model (SAM) 文章目录 【视觉分割新SOTA|论文解读1】一种最先进的图像分割模型——Segment Anything Mod…

全院级、流程化的医院安全不良事件管理系统源码——等级医院评审工作的辅助工具

前言: 冰山理论”指出“每件严重不良事件背后可能隐藏着10件轻微的不良事件”“存在30件未造成伤害的差错可能存在600件引发意外的异常事件”没有一件不良事件应该被忽视! 一项研究也指出95%医生曾目睹错误的发生,61%的医务人员认为医疗错误…

基于Python星载气溶胶数据处理与反演分析技术

MODIS(中分辨率成像光谱仪)和CALIOP(云-气溶胶偏振激光雷达)是两种重要的星载遥感观测平台,它们提供了大量的气溶胶数据。MODIS通过成像光谱技术获取不同波长的遥感数据,从而得到气溶胶的空间分布、光学厚度…

耳夹式耳机哪个最好?2024年五大热门耳夹式耳机品牌分享

耳夹式耳机哪个最好?2024年五大热门耳夹式耳机品牌分享 耳夹式蓝牙耳机怎样才算好、算优质呢?哪款比较好呢?对于第一个问题,我认为耳夹式蓝牙耳机得具备以下几个特征优势才称得上是优质产品。其一,要能提供清晰、平衡…

nuxtjs使用rem 实现自适应窗口的大小

效果图: 步骤 1:安装 PostCSS 和 PostCSS 插件 npm install postcss postcss-pxtorem --save-dev步骤 2:配置 nuxt.config.ts // nuxt.config.ts export default defineNuxtConfig({compatibilityDate: 2024-04-03,devtools: { enabled: …

本地windows文件上传到远程阿里云windows server方法

一.功能简介 在本地windows下开发完成软件后,需要上传到远程阿里云服务器进行发布,可使用该方法,快速实现本地文件上传。 二.方法 在本地windows系统使用快捷键 winR,打开运行对话框,‌通过这个对话框,用…

解决Windows Server 2016本地登录失败但远程登录正常的问题:排查与解决方案

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

2024VDC蓝河分会场:蓝河操作系统2 全栈自研 为AI而生

10月10日, 以“同心同行”为主题的2024vivo开发者大会在深圳成功举办,在同期举办的蓝河分会场上,vivo多位专家及产业界、学术界伙伴分享了在AGI时代下,蓝河操作系统带来的技术创新与实践,vivo希望携各方共建生态&#…

Monad 101 杭州线下活动:解锁创新技术,引领低成本高效 DApp 开发之路!

以太坊等区块链在处理传统金融大规模交易时面临巨大挑战,有限的可扩展性成为阻碍其广泛应用的主要瓶颈。为了解决这一难题,并缩小传统金融与去中心化金融(DeFi)之间的差距,Keone 创立了 Monad。通过显著提升交易速度和…

能效电气发布“四全”欧标直流桩系列产品

2024年10月12日,深圳 分布式充放电全球第一品牌、新型充放电解决方案卓越供应商,电动汽车充放电行业颠覆者、创新者、标准制定者、市场领导者,深圳市能效电气技术有限公司发布面向全球市场的全系列欧标直流充电桩产品,功率范围覆盖22kW-160kW,包括8大系列12种型号:20kW UE20、2…