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 修改完善了 Delete,Exists方法部分,累了休息一下下,争取周六周日两天内完成。
/// 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 增加了接口ClearProperty、GetFromDS 的定义。
/// 2004.07.21 版本:1.0 jjjco 提炼了最基础的方法部分、觉得这些是很有必要的方法。
///
/// 版本:1.8
///
/// <author>
/// <name>jjjco</name>
/// <date>2007.05.23</date>
/// </author>
/// </summary>
public interface IBaseManager
{
xxxxxx
}
这段注释有几个问题:
- 喃喃自语,
- 修改记录在有源代码管理的情况下,完全多余,不过鉴于最早的版本是2004.07.21,这一点,修改记录问题也不大。
- 注释中版本的不一致,最新的版本是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
效果如下:
记得以前我刚接触#region的时候,习惯性的写上了这样的代码:
对于经常使用#region的同学肯定知道上面的代码的问题。#region 后面是不需要加 “//” 的。
大师不愧是大师,另一个经典的注释是让你忘记不了他是如何使用#region的。
当我看到DbLogic的时候,我彻底崩溃了。
不过在批评别人的同时,我还是要说下大师的优点:- 代码结构清晰
- 命名相对来说还算规范
- 注释非常详细,虽然像上面的注释不在少数,但是不可否认的是注释非常详细,比如:
相关文章:

在c语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值,计算机二级考试 程序设计基础试题及答案三...
《程序设计基础》考试试卷三1. 判断下面标识符中哪个是C语言中合法的用户定义标识符:A. a-bB. #abdC. typedefD. _max2. …b?在内存中占个字节,“B”在内存中占个字节。A. 1B. 2C. 3D. 43. 下列表达式的值哪些不等于0?A. 2>>1B. ~a&am…

免费报名 | WPS专家教你文本分类在企业中的应用实践
文本分类问题是企业在 NLP 领域中处理文本数据时经常会遇到的一个问题,很多时候,我们需要将文本信息进行分类,或提相关的接口以供外部进行文本上传,在针对于用户所上传的文档信息就需要进行文档内容的分类,那么针对于这…

[ZT]如何取得客户端的Windows登录用户名?
1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:this.User.Identity.Name (IIS安全設置必須使用集成Windows驗證) 获取客户端电脑名:Page.Request.UserHostName 获取客户端电脑IP…

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

c语言1变A,c语言那些细节之a+1和a+1的区别
首先a是一个数组名,当看到这个a与&a时,一般我们的理解都是这个数组的首地址。没错,如果加上打印的话,确实两个值是一样的。不过&a是整个数组的首地址,a则是数组首元素的地址,虽然值一样,…

【收藏清单】AI学习资料汇总——你想要的AI资源,这里都有
本文汇总了TinyMind站内AI资料类热门文章TOP10,欢迎大家各取所需。来源:https://www.tinymind.cn/ 1、【AI入门者必看】——人工智能技术人才成长路线图 入门AI的两大方式与进阶AI的十大路线,吐血之作,人手必备。路线图可在文末…

25,000,000行的代码就问你敢不敢动?!
你经历过绝望吗?近日,Hacker News 上发起了一个名为“你见过最糟糕的代码是什么?”(https://news.ycombinator.com/item?id18442637)的话题,引发了无数网友回忆讨论,甚至还再次让软件巨头 Orac…

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

MySQL 微秒慢查询补丁
作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。原文出自:The new cool MySQL patch has landed! Check your…

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

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

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

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

Sublime-text theme 颜色主题
主题文件下载:Monokai.rar 替换办法: Preferences -> Browser packages -> Color Scheme - DefalutPreferences -> Browser packages -> Color Scheme - Defalut 覆盖 文件物理位置(win7): C:\Users\用户名\AppData\Roaming\S…
android 自定义radiobutton 样式,RadioButton自定义点击时的背景颜色
一、应用场景:在使用 RadioButton 时,有时我们会需要自定义点击时改变背景颜色的效果。效果图:RadioButton自定义背景颜色.jpg二、实现步骤:1、新建一组 RadioButton :android:layout_width"match_parent"an…

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

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

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

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

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

android 长按赋值功能,android实现WebView中长按选中复制文本操作
啥都不说了,老司机直接移步GITHUB看源码吧:https://github.com/deaboway/AndroidWebViewTextSelect万一不work,一定不是代码的问题,你可以自查链接中的如下情况CSS控制页面文字不能被选中user-select:none;body{-moz-user-select:…

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

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

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

今晚8点直播 | 详讲NLP的经典应用实践——文本分类
文本分类问题是企业在 NLP 领域中处理文本数据时经常会遇到的一个问题,很多时候,我们需要将文本信息进行分类,或提相关的接口以供外部进行文本上传,在针对于用户所上传的文档信息就需要进行文档内容的分类,那么针对于这…

谈论 嵌入式系统
引用 嵌入式系统嵌入式系统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 必备的组件,用户可根据自己需求联网安装或离线安装。接下来我们进入SharePoint 企业版的部署。 运行SharePointServer 2013 SP1 安装程序,点击“安装SharePoint Server”如下图: 企业版安装是需要…

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…

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

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