当前位置: 首页 > 编程日记 > 正文

Clean-Code: 注释

别给糟糕的代码加注释-----------------重新写吧

这是书中的关于注释一章的第一句话,怎么说呢,这句话个人感觉很对,但是实际上却很少这么做,

有几个原因:

  • 糟糕的代码不是自己写的,别人写的代码,还是让别人自己去维护吧,出了问题也是别人的。
  • 糟糕的代码目前可以正常工作,软件开发中有一条古老哲言:如果它能工作就不要动它,很多程序员都遵守这条准则。
  • 既然代码不能被修改,那么就只能加注释了。

上面的几个原因纯粹是自己的想法,希望你不要和我一样。

注释的好处基本上大家都知道,主要是为了方便其他人更好的查看和理解代码,下面的一些主要是乱用注释而导致的坏处:

可怕的注释,废话注释:

// the name

private string name;

// the version

private string version;

// the licenceName

private string licenceName;

// the version

private string info;

上面的代码注释的确多余了,并且还有剪切-粘贴错误,我想这可能是因为作者是外国人,所以对外国人来说英语是母语。但是中国的程序员大部分都用中文注释。所以上面的代码可能是这样:

// 姓名

 private string name;

 // 版本号

 private string version;

 // 许可名称

 private string licenceName;

 // 信息

 private string info;

虽然注释一样有些多余,不过对于英文不好的读者来说的确方便了不少。

下面的示例是我从某位大师的系统中抽取出来的

/// <summary>

/// IBaseManager

/// 通用接口部分

///

/// 总觉得自己写的程序不上档次,这些新技术也玩玩,也许做出来的东西更专业了。

/// 修改纪录

///

///     2007.11.01 版本:1.9 jjjco 改进 BUOperatorInfo 去掉这个变量,可以提高性能,提高速度,基类的又一次飞跃。

///     2007.05.23 版本:1.8 jjjco 修改完善了 对象事件触发器,完善了GetDT, ref 方法部分。

///     2007.05.20 版本:1.7 jjjco 修改完善了 对象事件触发器,完善了GetDT方法部分。

///     2007.05.19 版本:1.6 jjjco 修改完善了 DeleteExists方法部分,累了休息一下下,争取周六周日两天内完成。

///     2007.05.18 版本:1.5 jjjco 规范了一些接口的标准方法,进行了补充。

///     2007.05.17 版本:1.4 jjjco 重新调整主键的规范化,整体上又上升了一个层次了。

///     2006.02.05 版本:1.3 jjjco 重新调整主键的规范化。

///     2005.08.19 版本:1.2 jjjco 参数进行改进

///     2004.07.23 版本:1.1 jjjco 增加了接口ClearPropertyGetFromDS 的定义。

///     2004.07.21 版本:1.0 jjjco 提炼了最基础的方法部分、觉得这些是很有必要的方法。

///

/// 版本:1.8

///

/// <author>

///     <name>jjjco</name>

///     <date>2007.05.23</date>

/// </author>

/// </summary>

public interface IBaseManager

{

    xxxxxx

}

这段注释有几个问题:

  1. 喃喃自语,
  2. 修改记录在有源代码管理的情况下,完全多余,不过鉴于最早的版本是2004.07.21,这一点,修改记录问题也不大。
  3. 注释中版本的不一致,最新的版本是2007.11.01的版本1.9 .但是下面显示的版本是1.8.版本不一致的原因是作者忘记了,包括下面的<date>2007.05.23</date>

#region 注释

msdn  解释:

#region 使您可以在使用 Visual Studio 代码编辑器的 大纲显示功能时指定可展开或折叠的代码块。 在较长的代码文件中,能够折叠或隐藏一个或多个区域会十分便利,这样,您可将精力集中于当前处理的文件部分。

#region MyClass definition

public class MyClass

{

    static void Main()

    {

    }

}

#endregion

效果如下:

clip_image002

记得以前我刚接触#region的时候,习惯性的写上了这样的代码:

image

对于经常使用#region的同学肯定知道上面的代码的问题。#region 后面是不需要加 “//” 的。

大师不愧是大师,另一个经典的注释是让你忘记不了他是如何使用#region的。

clip_image002

当我看到DbLogic的时候,我彻底崩溃了。

不过在批评别人的同时,我还是要说下大师的优点:

  1. 代码结构清晰
  2. 命名相对来说还算规范
  3. 注释非常详细,虽然像上面的注释不在少数,但是不可否认的是注释非常详细,比如:

clip_image002






本文转自LoveJenny博客园博客,原文链接:http://www.cnblogs.com/LoveJenny/archive/2011/09/16/2178235.html,如需转载请自行联系原作者

相关文章:

在c语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值,计算机二级考试 程序设计基础试题及答案三...

《程序设计基础》考试试卷三1. 判断下面标识符中哪个是C语言中合法的用户定义标识符&#xff1a;A. a-bB. #abdC. typedefD. _max2. …b?在内存中占个字节&#xff0c;“B”在内存中占个字节。A. 1B. 2C. 3D. 43. 下列表达式的值哪些不等于0&#xff1f;A. 2>>1B. ~a&am…

免费报名 | WPS专家教你文本分类在企业中的应用实践

文本分类问题是企业在 NLP 领域中处理文本数据时经常会遇到的一个问题&#xff0c;很多时候&#xff0c;我们需要将文本信息进行分类&#xff0c;或提相关的接口以供外部进行文本上传&#xff0c;在针对于用户所上传的文档信息就需要进行文档内容的分类&#xff0c;那么针对于这…

[ZT]如何取得客户端的Windows登录用户名?

1. 在ASP.NET中专用属性&#xff1a; 获取服务器电脑名&#xff1a;Page.Server.ManchineName 获取用户信息&#xff1a;this.User.Identity.Name (IIS安全設置必須使用集成Windows驗證) 获取客户端电脑名&#xff1a;Page.Request.UserHostName 获取客户端电脑IP…

C#使用WIN32API来高效率的遍历文件和目录(转)

我们有时需要遍历某个目录下的文件和子目录&#xff0c;可以使用System.IO.DirectoryInfo.GetDirectories或 GetFiles来获得目录下的所有的文件和子目录&#xff0c;当这个目录下的内容比较多时&#xff0c;这个操作就比较耗时间&#xff0c;有时我们仅仅需要知道某个目录下是否…

c语言1变A,c语言那些细节之a+1和a+1的区别

首先a是一个数组名&#xff0c;当看到这个a与&a时&#xff0c;一般我们的理解都是这个数组的首地址。没错&#xff0c;如果加上打印的话&#xff0c;确实两个值是一样的。不过&a是整个数组的首地址&#xff0c;a则是数组首元素的地址&#xff0c;虽然值一样&#xff0c…

【收藏清单】AI学习资料汇总——你想要的AI资源,这里都有

本文汇总了TinyMind站内AI资料类热门文章TOP10&#xff0c;欢迎大家各取所需。来源&#xff1a;https://www.tinymind.cn/ 1、【AI入门者必看】——人工智能技术人才成长路线图 入门AI的两大方式与进阶AI的十大路线&#xff0c;吐血之作&#xff0c;人手必备。路线图可在文末…

25,000,000行的代码就问你敢不敢动?!

你经历过绝望吗&#xff1f;近日&#xff0c;Hacker News 上发起了一个名为“你见过最糟糕的代码是什么&#xff1f;”&#xff08;https://news.ycombinator.com/item?id18442637&#xff09;的话题&#xff0c;引发了无数网友回忆讨论&#xff0c;甚至还再次让软件巨头 Orac…

c语言规定预处理命令必须以什么开头,C语言规定预处理命令必须以___________开头...

在定温定容下&#xff0c;语言规开反应NH4Cl (s) NH3 (g) HCl (g)达平衡&#xff0c;加入惰性气体平衡不移动05580041&#xff1a;定预若a、b均为int型变量,且a100,则for (b100;a!b;a,b) printf(----\n)是死循环。()处理05710012&#xff1a;以下正确的描述是( )。命令成年早期…

MySQL 微秒慢查询补丁

作/译者&#xff1a;叶金荣&#xff08;Email: &#xff09;&#xff0c;来源&#xff1a;http://imysql.cn&#xff0c;转载请注明作/译者和出处&#xff0c;并且不能用于商业用途&#xff0c;违者必究。原文出自&#xff1a;The new cool MySQL patch has landed! Check your…

Win10 15063 开始运行不保存历史记录原因和解决方法

在Win10 1703的时候你也许会发现开始运行以后&#xff0c;再次打开就没有任何历史记录了&#xff0c;常规方法是桌面-右键-个性化-开始-显示最常用的应用..可是打开是灰色的不可选.. 其实这个问题很好解决&#xff0c;在win10 15063隐私里面有一个设置的原因&#xff0c;请跟随…

CCNA培训课总结笔记--交换机的基本配置(十三)

实验目的:熟悉交换机的基本配置,学会在交换机上划分VLAN及如何将接口划分到指定的VLAN.本实验主要是用模拟器DynamipsGUI及3640的IOS文件做的实验,所以配置的命令有些会有出入.实验设备:3640交换机系列实验内容:其实交换机的基本操作包括设置特权登陆密码,设置控制台的密码等都…

TensorFlow 2.0发布在即,高级API变化抢先看

作者 | Sandeep Gupta, Josh Gordon, and Karmel Allison整理 | 非主流、Jane出品 | AI科技大本营【导语】早在今年 8 月的时候&#xff0c;谷歌开源战略师 Edd Wilder-James 在一封公开邮件中表示正在研发 TensorFlow 2.0&#xff0c;并将于今年晚些时候发布预览版。在 2018 年…

mp4 android自动播放,Android 使用VideoView播放MP4的简单实现

使用VideoView播放MP4播放示例实现简单的播放功能&#xff0c;播放手机本地的MP4文件。不依赖任何第三方框架&#xff0c;不添加任何防腐剂。添加一个系统自带的控制条。申请权限读取存储中的MP4文件准备布局文件在frag_video_view.xml中放置VideoView&#xff1b;为了让内容居…

Sublime-text theme 颜色主题

主题文件下载&#xff1a;Monokai.rar 替换办法&#xff1a; Preferences -> Browser packages -> Color Scheme - DefalutPreferences -> Browser packages -> Color Scheme - Defalut 覆盖 文件物理位置(win7)&#xff1a; C:\Users\用户名\AppData\Roaming\S…

android 自定义radiobutton 样式,RadioButton自定义点击时的背景颜色

一、应用场景&#xff1a;在使用 RadioButton 时&#xff0c;有时我们会需要自定义点击时改变背景颜色的效果。效果图&#xff1a;RadioButton自定义背景颜色.jpg二、实现步骤&#xff1a;1、新建一组 RadioButton &#xff1a;android:layout_width"match_parent"an…

如何让网页不受电信114劫持

每当出现输入网页错误时&#xff0c;电信总会把你劫持到他所在的网页下&#xff0c;如下&#xff1a;[url]http://game1.zj.vnet.cn/url1.php?MTwww.dsdsddsds.com[/url]看了这张老脸就觉得浑身不舒服。能不能想个办法不让他出现呢&#xff1f;嘿嘿&#xff0c;其实很简单&…

“男医生,女护士?”消除偏见,Google有大招

编译整理 | 若奇出品 | AI科技大本营如何消除 AI 带来的性别偏见是个令人头疼的问题&#xff0c;那究竟有没有方法去解决&#xff1f;12 月 6 日&#xff0c;Google 宣布他们迈出了减少 Google 翻译中性别偏见的第一步&#xff0c;并且还详细介绍了如何为 Google 翻译上的性别中…

Web Developer中文版下载

Web Developer是一款非常优秀的网页调试工具。Web Developer有IE和Firefox两个版本&#xff0c;主要功能表现在几个重要的方面&#xff1a;对页面中的文本、图像、媒体文件进行控制&#xff0c;对网页所应用的CSS文件的id与class辅助查看&#xff0c;表格辅助查看&#xff0c;可…

位置服务与地图应用

位置服务与地图应用: 位置服务&#xff08;Location Based Services,LBS&#xff09;又称为服务或基于位置的服务。Andorid平台支持提供位置服务的API&#xff0c;在开发过程中主要用到LocationManager 和LocationProviders对象。 为开发能够提供位置服务&#xff0c;首先需要得…

20分钟教你搞懂Git!

Git 是最流行的版本管理工具&#xff0c;也是程序员必备的技能之一。本文就来教你 20 分钟搞懂 Git&#xff01;以下为译文&#xff1a;尽管每天你都会用到Git&#xff0c;但也有可能搞不懂它的工作原理。为什么Git可以管理版本&#xff1f;基本命令git add和git commit到底在干…

android 长按赋值功能,android实现WebView中长按选中复制文本操作

啥都不说了&#xff0c;老司机直接移步GITHUB看源码吧&#xff1a;https://github.com/deaboway/AndroidWebViewTextSelect万一不work&#xff0c;一定不是代码的问题&#xff0c;你可以自查链接中的如下情况CSS控制页面文字不能被选中user-select:none;body{-moz-user-select:…

如何找回丢失的Vista系统“休眠”菜单

如何让Vista系统“休眠”菜单重见天日一些使用Windows Vista的朋友为了节省磁盘空间&#xff0c;在命令提示符下使用命令关闭休眠功能。但是如果再用相同的方法打开休眠功能时&#xff0c;就会发现&#xff0c;即使恢复了功能&#xff0c;“休眠”菜单还是看不见&#xff0c;这…

go3--常量和类型转换

/* Go中不存在隐式转换&#xff0c;所有类型转换必须显式声明 转换只能发生在两种相互兼容的类型之间 类型转换的格式&#xff1a;<ValueA> [:] <TypeOfValueA>(<ValueB>)全局变量可以使用var&#xff08;&#xff09;的形式&#xff0c;局部变量不可以使用v…

android倒计时实现方法,Android实现倒计时方法汇总

Android开发中经常会有倒计时的功能&#xff0c;下面将总结出常见的集中实现方式。1.直接使用Handler的消息机制来实现xml布局中文件如下&#xff1a;android:layout_width"match_parent"android:layout_height"match_parent"android:orientation"hor…

今晚8点直播 | 详讲NLP的经典应用实践——文本分类

文本分类问题是企业在 NLP 领域中处理文本数据时经常会遇到的一个问题&#xff0c;很多时候&#xff0c;我们需要将文本信息进行分类&#xff0c;或提相关的接口以供外部进行文本上传&#xff0c;在针对于用户所上传的文档信息就需要进行文档内容的分类&#xff0c;那么针对于这…

谈论 嵌入式系统

引用 嵌入式系统嵌入式系统http://www.lumit.org/index.htm嵌入式相关的网站http://www.mcu123.com/news/Article/web/uc/200611/3939.html转载于:https://www.cnblogs.com/stoneresearch/archive/2008/10/21/4336381.html

SharePoint Server 2013 之四:部署SharePoint企业版

在上篇文章我们完成了SharePointServer 2013 必备的组件&#xff0c;用户可根据自己需求联网安装或离线安装。接下来我们进入SharePoint 企业版的部署。 运行SharePointServer 2013 SP1 安装程序&#xff0c;点击“安装SharePoint Server”如下图&#xff1a; 企业版安装是需要…

android 监测内存泄漏工具,LeakCanary:Android内存泄漏检测工具

LeakCanaryA memory leak detection library for Android and Java.“A small leak will sink a great ship.” - Benjamin FranklinGetting startedIn your build.gradle:dependencies {debugImplementation com.squareup.leakcanary:leakcanary-android:1.6.1releaseImplemen…

为什么说可视化编程是糟糕的想法?

可视化编程语言可以让程序员通过操纵图形元素来创建程序&#xff0c;而无需键入文本命令。众所周知的例子是 Scratch&#xff0c;这是一种麻省理工学院开发的可视化编程语言&#xff0c;用来教孩子们学编程。该语言的优势在于新手和普通用户可以更容易接触编程。二十世纪九十年…

7年增长16倍,清华AI+ML课程学生数暴增 | AI Index 2018

整理 | 非主流出品 | AI科技大本营用数据解读 AI。昨日&#xff0c;来自斯坦福大学、MIT、哈佛、OpenAI 等高校与企业的多位专家正式发布了 2018 年度 AI Index 报告&#xff0c;用一系列数据全面回顾了过去几年里 AI 领域的全球发展。营长挑了一些重点内容&#xff0c;为大家解…