习惯使用断言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 ...
随机推荐
- JDBC之一:JDBC快速入门
(1)下载Oracle的JDBC驱动,一般放在$ORACLE_HOME/jdbc/lib目录,关于驱动的版本请见: http://elf8848.iteye.com/blog/811037 随Orac ...
- 如何使用composer?
/** *@测试环境:我笔记本 本地xampp集成环境 *@操作系统:Windows 7 **/ 安装方法:官方有很详细的介绍,这里就不重复造轮子了. 官方链接:http://docs.phpco ...
- python操作csv-xls完善后的代码
#coding:utf-8 #导入相应模块 import csv,xlwt,sys,os,fnmatch,xlrd from xlutils.copy import copy #对xls文件中的绝对值 ...
- Immediate Decodability(字典树)
Immediate Decodability Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- MySQL5.7新特性笔记
001.用户验证方式上的变化 MySQL5.7已经不要支持mysql_old_password验证插件,也不再支持old_password函数,也就说old_passwords也就不能被设置成1了.
- Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
select distinct b.lvl 层次, b.OPERATION_SEQ ...
- 我所不知道的 Chrome 开发者工具
http://www.oschina.net/translate/things-i-didnt-know-about-chrome-devtools 自打我开始进行Web开发后,我就一直将Firebu ...
- GO学习资源站
GO语言学习资源网站 http://golangtc.com https://gobyexample.com http://golang-examples.tumblr.com
- 善待Redis里的数据--Unable to validate object
又是一篇关于姿势的文章,为什么是”又”呢?因为上个星期刚写完一篇关于Apache Commons Pool的正确使用姿势的文章,点击此处阅读. Redis为我们提供便利的同时,我们也要善待里面的数据 ...
- 【POJ 1182 食物链】并查集
此题按照<挑战程序设计竞赛(第2版)>P89的解法,不容易想到,但想清楚了代码还是比较直观的. 并查集模板(包含了记录高度的rank数组和查询时状态压缩) *; int par[MAX_N ...