习惯使用断言Assert
一直在给党做项目,我们这些可怜兮兮的学生都没太多时间安排自己的活动了,写个blog都要在中午休息的时间。
项目用的是.NET,本来也想分享一些干货点的东西,但博客园里的前辈把这类文章已经分享泛滥了,想要原创一些有价值的东西其实挺不容易的,能够在前人基础上拓展一下就已经挺不错了,相信每一个认真经营博客的人都挺有体会,所以在博客记录一些平时项目开发的感悟也不失为一个好地方。
Assert在整个项目开发中的重要性是很多人一直都忽略掉的,这一点从我接触到的项目来看,挺明显,可以说,它的出现频率与项目代码的质量成正比,如果一段代码综合水平比较高,那么几乎总会出现至少那么一两个断言,而断言的重要性又是在很多代码质量类的书上一直在强调的。
嘛,既然断言在Release时不会出现在最终版本中,那么Debug版本时,它是如何提升开发效率的?
private void ShowProjectInfomation(string projectID)
{
Debug.Assert(!string.IsNullOrEmpty(projectID));
}
假设我们需要一个项目的ID(projectID),从数据集中取出这个ID对应的一个项目的具体信息,这个时候的背景条件是projectID一定会传进一个值,因为该函数并不以供给客户调用的形式存在。这个时候,如果这样写,并不是最好的做法。
private void ShowProjectInfomation(string projectID)
{
if (string.IsNullOrEmpty(projectID))
{
throw new ArgumentNullException("项目ID不可为空");
}
}
抛异常的好处坏处很多书也有提及,此不赘述。
使用Assert,如果出现参数违法,此时开发阶段可以修正此错误,保证传进来的参数一定是合法的,那么在最终版本中,就避免了影响性能的错误检测代码。
啐。。。写文章的描述能力真的挺重要的,感觉好没耐心去准备一篇高质量文章,往往是想到什么就写。。。
这里想抱怨一下国家的一些项目,其实和坊间传的差不多,国家的项目的代码质量整体来说并不好,有些水平很好的老师也不太注重代码本身的质量,最基本的DRY并不遵守,导致干活儿的学生也盲目效仿,到处都有Bad Smell,代码规范不完整统一,导致后来维护的,编写的,都很难轻松地干完活儿。嗯。。。好在钱发的还挺多的。。。
习惯使用断言Assert的更多相关文章
- C# 断言 Assert
重构-断言 现象:某一段代码需要对程序状态做出某种假设 做法:以断言明确表现这种假设 动机: 常常有这种一段代码:只有某个条件为真是,该改名才能正常运行. 通常假设这样的假设并没有代码中明确表现出来, ...
- SpringBoot(20)---断言(Assert)
SpringBoot(20)---断言(Assert) 我们在写单元测试的时候,除了接口直接抛异常而导致该单元测试失败外,还有种是业务上的错误也代表着该单元测试失败.好比我们在测试接口的时候, 该接口 ...
- 断言(assert)的用法
我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”. 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解 ...
- C语言中断言ASSERT
我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错". 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种&qu ...
- 使用断言assert
之前有看过关于Assert的书,但是不懂得如何去用,最近看别人写的代码有用这个断言(assert),今天自己动手看看如何使用断言. 断言(assert)的语义如下:如果表达式的值为0(假),则输出错误 ...
- 断言Assert的使用
转载地址:http://www.cnblogs.com/moondark/archive/2012/03/12/2392315.html 我一直以为assert仅仅是个报错函数,事实上,它居然是个宏 ...
- K:java 断言 assert 初步使用:断言开启、断言使用
@转自天地悠悠的个人博客 主要总结一下在eclipse中如何使用断言. (一)首先明确: java断言Assert是jdk1.4引入的. jvm 断言默认是关闭的. 断言是可以局部开启的,如:父类禁止 ...
- java的断言(assert)
概述 在C和C++语言中都有assert关键,表示断言.在Java中,同样也有assert关键字,表示断言,用法和含义都差不多.在Java中,assert关键字是从JAVA SE 1.4 引入的,为了 ...
- JavaScript之调试工具之断言assert
1.单点断言 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...
随机推荐
- 从汇编看c++中指向成员变量的指针(一)
在c++中,指向类成员变量的指针存储的并不是该成员变量所在内存的地址,而仅仅是该成员变量在该类对象中相对于对象首地址的偏移量.因此,它必须绑定到某一个对象或者对象指针上面,这里的对象和对象指针,就相当 ...
- maven+springmvc+easyui+fastjson+pagehelper
1.maven配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- SQL Server 与 Windows 内存使用上的约定
什么时候SQL Server 会释放出自己的内存!以提供给别的程序用呢? --------------------------------------------------------------- ...
- 将一段含有0的字符数组赋给string
string有个成员函数,assign() 可以这样: string str; str.assign(temp, sizeof(temp));
- GNU所有软件下载,其中最有意思的是octave
http://ftp.gnu.org/gnu/ 最有意思的是octave:https://www.gnu.org/software/octave/http://ftp.gnu.org/gnu/octa ...
- 时间TDateTime相当于是Double,即双精度数64位,终于查到它用11位表示e,53位表示精度(整数小数一起),最前面一位表示正负
http://docwiki.embarcadero.com/RADStudio/Seattle/en/Internal_Data_Formats 关于Double的RTL函数,好像就一个:TrySt ...
- ISSkin Pack 3.0 (含预览程序 ISSkinViewer)
原文 http://restools.hanzify.org/article.asp?id=108 包含 250 款皮肤, 预览程序纯粹的由Inno Setup脚本写成. 足以展示Inno Setup ...
- 只有勇敢的人、鲁莽的人和绝望的人才会追求大的变革 – D.J. Anderson
只有勇敢的人.鲁莽的人和绝望的人才会追求大的变革 – D.J. Anderson http://www.cnblogs.com/lchrennew/p/Why-The-Future-Of-Agile- ...
- lastcomm搜索并显示以前执行过的命令信息
lastcomm搜索并显示以前执行过的命令信息
- linux grep练习
1.显示/proc/meminfo文件中以不区分大小的s开头的行: 2.显示/etc/passwd中以nologin结尾的行; 3.显示/etc/inittab中以#开头,且后面跟一个或多个空白字符, ...