php 代码需要重写注释_不要注释错误的代码-重写它

2023-10-31

php 代码需要重写注释

在这篇文章中,我将分享我通过阅读代码,编写代码和阅读书本获得的“代码注释”的经验。

让我们从著名的报价开始

 “Don't comment bad code—rewrite it.” 
   —Brian W. Kernighan and PJ Plaugher 

代码中的大量注释看起来就像上面的图片一样,令人分心。

评论是谎言
大多数时候,注释与代码不同步,没有人关心它,因此没有人维护它。

代码重构
代码在不断改进,它不断变化,发展和消亡,但代码注释只是粘滞而成为孤立的。

错误的代码有更多注释
一旦编写了难以理解的代码,我们便尝试通过注释来解释它,这充分说明了我们编写表达性代码失败的原因。

嘈杂的评论
让我们看一下公共领域中的一些代码和注释。

https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsAdmin.java

/**
   * Create a new HdfsAdmin client.
   *
   * @param uri the unique URI of the HDFS file system to administer
   * @param conf configuration
   * @throws IOException in the event the file system could not be created
   */
public HdfsAdmin(URI uri, Configuration conf) throws IOException {
FileSystem fs = FileSystem.get(uri, conf);
if (!(fs instanceof DistributedFileSystem)) {
throw new IllegalArgumentException("'" + uri + "' is not an HDFS URI.");
} else {
dfs = (DistributedFileSystem)fs;
}
}

此代码段来自流行的开源Java项目,企业中的许多注释也是如此。 这会增加噪音多于价值。

期刊评论
许多脚本代码,数据库代码,python代码都是基于此模式的,看起来团队对源代码控制不信任,他们已经接管了这一职责。 看起来像下面

/ *
2019年4月1日–最初的版本带有某人的框架代码
2019年4月10日–某人添加了配置支持 …。 * /

标记评论
这从下面的内容开始

//开始初始化

//进行数据库调用

这在脚本编写,DB存储过程或实际的企业类型程序中也很常见。 这种模式告诉我们提取小功能是大声疾呼,但却被忽视了。

注释代码
我确定您已经看过很多次了,并且对为什么存在此无效代码感到沮丧。
看起来像这样。

//保留此备份
// fastCode()
superFastCode()

作者代码
IDE向添加到项目的每个文件添加注释块,如下所示

/ *
@阿什克里特
* /
作者姓名仅位于文件的顶部,但他不再维护它,并且不适用于团队或组织,但偶尔会因他的创作而受到赞誉/指责。
结论 代码注释基本上没有任何价值,它介于您和代码之间,这是一种额外的干扰。它还使年轻的程序员养成不良习惯,因为他们认为“ 添加注释可使代码更好 ”。

在某些情况下,注释在您编写公共API时很有用,但仍要谨慎编写,软件工程师很聪明,他们可以理解代码是否没有意外的复杂性。

我将给您留下Kevlin Henney另一条著名的推文

如果您喜欢该帖子,那么可以在Twitter上关注我

翻译自: https://www.javacodegeeks.com/2019/11/dont-comment-bad-code-rewrite-it.html

php 代码需要重写注释

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 代码需要重写注释_不要注释错误的代码-重写它 的相关文章

  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 如何将 GAE 中一种 Kind 中的所有实体复制到另一种 Kind 中,而无需显式调用每个属性

    我们如何使用function clone entity 如中所述在 Python 中复制 Google App Engine 数据存储中的实体 而无需在 编译 时知道属性名称 https stackoverflow com question
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的

随机推荐

  • rest以及restful的基本理解

    传统下的API接口 http是目前在互联网上使用最多的协议 没有之一 可是http的创始人一直都觉得 在过去10几年来 所有的人都在错误的使用Http 这句话怎么说呢 如果说你要删除一个数据 以往的做法通常是 delete id 如果你要更
  • 电脑抓屏按钮使用:

    键盘上 Print Screen Sys Rq 键的作用是屏幕抓图 用法一 按 Print Screen SysRq 一下 对当前屏幕进行抓图 就是整个显示屏的内容 用法二 先按住 Alt 键 再按 Print Screen SysRq 键
  • HBase高手之路1-Hbase简介

    文章目录 HBase高手之路1 Hbase简介 一 什么是HBase 1 HBase简介 2 HBase的发展过程 二 HBase特点 1 海量存储 2 列式存储 3 极易扩展 4 高并发 5 稀疏 6 强一致性读 写 7 自动分块 8 自
  • Web服务器的搭建

    一 Web服务器简介 Web服务器的基本功能是提供web信息浏览服务 主要涉及的协议是HTTP协议 二 Web服务器的搭建 1 安装httpd包 2 关闭防火墙 3 启动httpd服务 4 备份conf文件 5 配置浏览器网页读取的根目录
  • 微服务相关面试要点

    什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置 properties或yml文件 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化maven
  • python读视频文件_python读取和保存视频文件

    如何用python实现视频关键帧提取并保存为图片 也许你会觉得对小编多做一点事你会觉得你很爽 可是在小编看来这是不屑的 import cv2vc cv2 VideoCapture Test avi 读入视频文件c 1if vc isOpen
  • linux安装anaconda

    linux安装anaconda 1 下载anaconda Conda 是一个强大的包管理器和环境管理器 您可以在 Windows 的 Anaconda Prompt 或 macOS 或 Linux 的终端窗口中与命令行命令一起使用 换句话说
  • Linux Socket网络编程 循环互相通信

    一 效果展示 持续互相通信 上面是服务端 下面为客户端加上ip 最后客户端输入exit退出 二 代码展示 服务端 server c include
  • Leetcode刷题:空间缩减思想

    文章目录 167 两数之和 II 输入有序数组 11 盛最多水的容器 240 搜索二维矩阵 II 11 盛最多水的容器 暴力 空间缩减 证明 二分 167 两数之和 II 输入有序数组 167 两数之和 II 输入有序数组 1 二分 cla
  • R语言在图上标出点坐标_R语言做图plot参数

    R语言做图plot参数函数名称 plot 用 途 作图 用 法 plot x y 参 数 1 符号和线条 pch 指定绘制点所使用的符号 取值范围 0 24 其中4是 差号 20是 点 cex 指定符号的大小 cex是一个数值 表示pch的
  • NVIDIA GeFprce GTX 1080 Ti NVIDIA图形驱动程序版本466.77下载和安装

    前言 在win7下 NVIDIA GeFprce GTX 1080 Ti NVIDIA图形驱动程序版本466 77下载和安装 但安装时系统报错 缺少KB4474419和KB4490628补丁 解决 NVIDIA GeFprce GTX 10
  • win10解决COM Surrogate问题

    Fix Problems with COM Surrogate on Windows 10 For various PC problems we recommend to use this tool This tool will repai
  • NPN和PNP 的电流方向 、大小关系 、电压偏置

    电流流向 NPN三极管 电流方向为基极流向发射极 驱动电流从基极流入 集电极流向发射极 PNP三极管 电流方向为发射极流向基极 驱动电流从基极流出 发射极流向集电极 PNP的电流方向是从下往上流的 但是在实际电路图中 大多还是发射极连接高电
  • 【LVGL事件(Events)】事件在不同组件上的应用(一)

    点击 滑动 输入 数字改变等等都可触发事件 事件就是针对不同的操作做出相对应的反应 最近看到组态屏 这玩意开发起来好像挺简单的 哈哈哈 研究完LVGL的事件就看看这个 LVGL事件 Events 事件代码 喜暖知寒的博客 CSDN博客LVG
  • 如何监听edittext输入完成

    转载于 http blog csdn net harryweasley article details 50395209 假如你要做这样的一个功能 通过在编辑框输入一些字符进行搜索 输入完成后 再显示搜索结果 在输入的过程中 并不想一直通知
  • ffmpeg命令行太多了_如何使用FFmpeg从视频中删除多个片段?

    我编写了一个脚本来加快编辑录制的电视的速度 该脚本会询问您要保留的段的开始和结束时间 并将其拆分为文件 它为您提供了选择 您可以 采取一个或多个细分 您可以将这些段合并为一个结果文件 加入后 您可以保留或删除零件文件 您可以保留原始文件或将
  • python爬虫-单线程爬取图片

    今天我们准备使用爬虫来爬取一些图片首先我们找到其url页面 https pvp qq com web201605 wallpaper shtml 进入之后当我们点击跳转页面的时候 发现其上方的网址没有发生变化 如果不发生变化的话就不可以进行
  • 【TensorFlow】tf.nn、tf.layers和tf.contrib模块

    转自 https blog csdn net u014365862 article details 77833481 我们在使用tensorflow时 会发现tf nn tf layers tf contrib模块有很多功能是重复的 尤其是
  • Aware&原理---Spring源码从入门到精通(十四)

    上篇文章主要介绍 Autowired自动装配 1 Bean注解 传参在方法上 自动装配 参数会从ioc容器从获取 2 有参构造器如果只有一个的情况下 也可以省略 Autowired不写 自动装配 感兴趣的同学可以点进去看看 自动装配构造器
  • php 代码需要重写注释_不要注释错误的代码-重写它

    php 代码需要重写注释 在这篇文章中 我将分享我通过阅读代码 编写代码和阅读书本获得的 代码注释 的经验 让我们从著名的报价开始 Don t comment bad code rewrite it Brian W Kernighan an