当前位置: 首页 >  在线教学 >  [编程] 你真的会写函数注释?这里给你一个答案

[编程] 你真的会写函数注释?这里给你一个答案

导读:导论.软件开发作为一项系统工程,其中最基础而重要的一个环节就是代码编写。然而,在代码编写的顺序上,业内一直存在着“先注释后代码”和“先代码后注释”两种模式,关于哪一种模式更好,争论一直未休。.事实上,这两种模式各有利弊。“先注释后代码”强调整体设计,注重可读性和可维护性;但其操作

导论

软件开发作为一项系统工程,其中最基础而重要的一个环节就是代码编写。然而,在代码编写的顺序上,业内一直存在着“先注释后代码”和“先代码后注释”两种模式,关于哪一种模式更好,争论一直未休。

事实上,这两种模式各有利弊。“先注释后代码”强调整体设计,注重可读性和可维护性;但其操作成本高,效率低下。“先代码后注释”注重快速验证思路,但容易忽略设计细节,给日后维护带来困难。文将从历史演变和软件工程实践两个角度,系统论述这两种模式在不同阶段的优劣势,并给出更深入的分析,得出一个逻辑自洽的理论性编写建议。

本文的观点如下:

  • 随着IDE和其他软件工具的发展,两种模式在历史上都有过不同阶段的应用
  • 从项目管理和代码质量两个层面,它们各有利弊
  • 对注释目的正本清源,才能正确写注释
  • 两种模式本质上不是对立的

历史上的演变

早期机器语言阶段,由于编码难度极大,程序开发主要注重设计与文档记录。这一时期,“先注释后代码”成为主流模式。同时,随着软件工程学科的形成和发展,“先注释”模式作为一种系统化的软件开发方法也得到推广和传播,进一步成为主流看法。

随着高级语言的出现,编程难度降低,但项目规模也日益扩大。为了提高开发效率,一些开发团队开始采用“先代码后注释”的方式来进行快速编码与迭代。这种模式强调先按功能模块实现基本功能,后续再梳理注释与设计文档。

90年代,随着互联网的兴起,软件开发项目越来越多采用小型团队的敏捷开发模式。这种模式下,快速交付产品成为首要任务。“先代码”模式因其高效的开发特性而得到广泛采用。

总体来说,随着技术水平和管理模式的变化,”先注释“与“先代码“两种模式在不同历史阶段都发挥过各自的优势。它们也在不断互相影响,共同推动着软件开发范式的演变。

更多的细节

其实争论主要源自于对于项目不同阶段的强调。其实双方都承认整个项目,尤其是大型项目都需要整体的设计,对这一点双方并没有严重分歧。主要的分歧在于对于更小的,函数尤其是小函数级别的范围上,究竟是否需要完备的事先设计并形成文档化,还是快速进入编码并在代码趋于稳定后回头补充相关文档。

在先编码概念下,其中比较有名的一本2015年出版的书:《Code as Design: Three Essays by Jack W. Reeves》。在文章中作者指出:

  1. 编码并不是机械得实现原始设计。编码过程中程序员必须做出大量设计选择和权衡,这才是设计活动的关键所在;
  2. 编码阶段的设计决策事实上会深刻影响最终软件的结构。像命名、代码组织、控制流等都包含设计内容。因此不能认为编码只是映射先期设计。
  3. 依赖设计文档而不看实际代码,无法判断软件品质。因为文档常常会与代码脱节。只有代码才是设计的权威表

而强调先注释的一方则认为即使是最小的函数,也应该先进行基本的设计然后展开编码。

几种函数注释模式

如果注释的内容就是代码是如何实现函数的功能的,那么显然当函数的最终代码在实现过程中会被多次重构的话,那么“先编码”的观点显然是正确的。即使先进行设计,那么99%的设计都是会被推翻的。然而我们不能因此就同意在最终函数级别就应该“先编码”。这里的核心问题是双方对于注释的理解不科学。

我们给出注释可能的几种模式

  1. 注释所包含的信息量完全和代码所包含的信息量一致
  2. 注释所包含的信息量是代码所包含的信息量的真子集
  3. 注释所包含的信息量中包含一个代码所包含的信息量的真子集

如果注释的内容就是代码如何实现,从信息量角度两者如果是等价的,那么这样的注释其实就是信息的冗余。为了维护注释和实际代码的一致性,显然需要更多的工作量。此时我们需要的仅仅是一个自动化工具,能自动将注释映射成代码,或者自动将代码映射成注释就可以了。几十年来这样的工具都没有出现,足以证明第一个模式并不是事实。这个推理对于第二种模式同样适用。注释如果只是代码信息的一个真子集,那么用刚才的工具也基本能解决问题。

函数及函数内注释的定义

从需求到代码,是一个信息量逐渐丢失的过程,也是一个信息量逐渐增加的过程。有些设计意图背后的原因不会在代码中被展示,具体代码的实现方式几乎不可能在业务需求中被指定。注释究竟需要描述什么东西?我们把注释分为两类,一类是偏业务端的信息描述,另一类是偏技术实现端的描述信息。基于现有的讨论分析,我们给出以下的建议

什么时候写注释

  • 函数注释必须先于实际代码编写而完成

注释写什么

  • 函数注释的核心内容是函数的业务目的,不涉及函数的具体实现方式和处理过程
  • 函数内注释的核心是具体业务操作步骤、相关算法或技术实现的信息

遵守以上的建议,那么我们的函数注释将处于一个比实现代码更稳定的状态,不会因为具体功能的实现方式在实际编码过程中的优化和重构而变化。并且提供了实现代码所不能体现的实际业务上的目的和描述信息,使得整个项目从上到下的设计目的的描述得以连续和完整。同时明确了业务描述和技术描述两种不同目的的注释信息的编写位置。

如果我们进一步遵守函数职责单一化的建议,那么实际上函数内注释几乎就不会出现需要描述业务操作信息的情况了,因为每个函数内很可能最多只出现一个条件语句了。

总结

本文分析了编程行业中常见的“先编码”和“先注释”观点的历史成因和理念差异,指出两者其实并非完全对立而是相辅相成。并且给出了更为系统化理论化以及逻辑自洽的关于软件中函数注释信息应该如何编写的指导性意见。

内容
  • 小程序游戏未来的发展会去向何方?
    小程序游戏未来的发展会去向何方?
    2023-12-07
    随着移动互联网时代的到来,越来越多的人参与了小程序开发。目前根据《2022微信小游戏增长白皮书》,微信小游戏开发人员人数
  • 为teamcity的代码语法检查工具pyflakes增加支持python2和python3
    为teamcity的代码语法检查
    2023-12-07
    TeamCity和pyflakes.TeamCity是一款由JetBrains公司开发的持续集成和部署工具,它提供了丰富
  • 大佬们 有没有unity游戏开发的一些群呀,可以在底下评论一下吗??
    大佬们 有没有unity游戏开发
    2023-12-06
    欢迎大家的评论哦.下面是一些杂谈:.如何提高游戏开发水平.要提高游戏开发水平,你可以考虑以下几个方面:.学习和实践游戏开
  • 【Lua】(一)VSCode 搭建 Lua 开发环境
    【Lua】(一)VSCode 搭
    2023-12-05
    前言.最近在找工作,基本所有的岗位都会问到 Lua(甚至拼 UI 的都要求会 Lua),咱能怎么办呢,咱也只能学啊…….
  • Unity行为树可视化编辑器开发
    Unity行为树可视化编辑器开发
    2023-12-05
    Unity行为树插件开发心得.概述.在ARPG项目的开发过程当中,要涉及到NPC的AI系统,一般来说,简单的AI行为使用
  • Creator 2.x 升级 3.x 基础 API 差异总结
    Creator 2.x 升级 3
    2023-12-03
    上一篇我们介绍了 Cocos Creator 2.x 项目升级 3.x 的大流程。.但最后一步,还需要手动将之前 2.x
  • Spring面试攻略:如何展现你对Spring的深入理解
    Spring面试攻略:如何展现你
    2023-12-03
    什么是Spring?谈谈你对IOC和AOP的理解。.Spring是一种Java开发框架,旨在简化企业级应用程序的开发和部
  • iOS开发之进阶篇(1)—— 证书、打包上架流程、p12文件
    iOS开发之进阶篇(1)—— 证
    2023-12-03
    iOS开发相关的证书有很多种,iOS开发证书(iOS App Development)、iOS发布证书(iOS Dist
  • 在MacOS下使用Unity3D开发游戏
    在MacOS下使用Unity3D
    2023-12-03
    第一次发博客,先发一下我的游戏开发环境吧。.去年2月份买了一台MacBookPro2021 M1pro(以下简称mbp)
  • 详解驱动开发中内核PE结构VA与FOA转换
    详解驱动开发中内核PE结构VA与
    2023-12-02
    摘要: 本文将探索内核中解析PE文件的相关内容。.本文分享自华为云社区《驱动开发:内核PE结构VA与FOA转换》,作者:
  • 戏说领域驱动设计(廿六)——再谈事务
    戏说领域驱动设计(廿六)——再谈
    2023-12-01
    有关事务的内容,在前面我们已经不只谈过一次,没办法,这是一个绕不开的话题。你敢说你在开发中不用到它?最起码聚合进行序列化
  • Unity 游戏开发、03 基础篇 | C#初级编程
    Unity 游戏开发、03 基础
    2023-12-01
    C#初级编程.https://learn.u3d.cn/tutorial/beginner-gameplay-scrip
  • 景观照明工程
    景观照明工程
    2023-12-16
    景观照明工程.产品功能.景观照明工程是一种专门为户外景观设计的照明方案。它既可以美化城市风景,提升城市形象,也可以为人们
  • 排水**设计施工
    排水**设计施工
    2023-12-26
    排水**设计施工.产品功能.我们的排水系*设计施工服务旨在解决建筑物排水问题,确保排水系*的高效运行。我们提供全面的设计
  • 商业区景观规划设计
    商业区景观规划设计
    2024-01-20
    商业区景观规划设计.产品功能.我们的商业区景观规划设计产品旨在为商业区打造出色的室外环境,提升商业区的形象和吸引力。我们
  • 园林景观施工管理
    园林景观施工管理
    2023-12-21
    园林景观施工管理产品介绍.产品功能.园林景观施工管理是一款专业的园林景观施工项目**软件,旨在帮助园林景观施工公司或项目
  • 景观灯具**
    景观灯具**
    2024-01-10
    景观灯具**.产品功能.防水设计,可适应各种恶劣天气.高亮度LED灯源,节能环保.多种灯具款式可选,满足不同景观需求.灯
  • 喷泉景观设计
    喷泉景观设计
    2024-01-05
    喷泉景观设计.喷泉是一种极具观赏性和装饰性的景观设计元素,它不仅可以为周围的环境增添一份生气与动感,更可以为人们带来一份
  • 室外雕塑设计与**
    室外雕塑设计与**
    2023-12-06
    室外雕塑设计与**.产品功能.我们的室外雕塑设计与**服务旨在为客户提供高品质的室外雕塑,满足各种不同场合的需求。我们拥
  • 城市绿化规划设计
    城市绿化规划设计
    2024-01-15
    城市绿化规划设计.随着城市化进程的不断加快,城市绿化规划设计成为了一个备受关注的问题。如何在城市中保护和增加绿地,促进城
  • 绿化工程材料供应
    绿化工程材料供应
    2023-12-16
    绿化工程材料供应.产品功能.我们的绿化工程材料供应主要用于城市绿化、园林景观建设、庭院绿化等相关项目。产品种类丰富,覆盖
  • 市政园林设计
    市政园林设计
    2023-12-11
    市政园林设计.产品功能.我们的市政园林设计旨在为城市和社区提供优美、宜人的户外环境。我们设计的产品涵盖了公园、**、街道