文档章节

d语言之契约编程

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:46
字数 303
阅读 43
收藏 0

d语言之契约编程

参考自d程序设计语言---我的博客http://my.oschina.net/u/218155/blog?fromerr=SwOkb7Sw fllow me

import std.stdio;
import std.exception;
import std.algorithm;
import std.range;
import std.conv;
import std.regex;

//contract progarm
//assert
//before func
//after func
//invirant

class Date{
private:
	uint year,month,day;

	invariant(){
		assert(1 <= month && month <=12);
		switch(day){
			case 29:
				assert(month != 2 || leapYear(year));
				break;
			case 30:
				assert(month != 2);
				break;
			case 31:
				assert(longMonth(month));
				break;
			default:
				assert(1<=day && day <= 20);
				break;
		}
	}
	static pure bool leapYear(uint y){
		return (y%4) == 0 && (y%100 || (y %400)==0);
	}
	static pure bool longMonth(uint m){
		return !(m & 1) == (m > 7);
	}

	void nextMonth(){
		//__call_invariant();
		//scope(exit)__call_invariant();
		if(month == 12){
			++year;
			month = 1;
		}else{
			++month;
			adjustDay();
		}
	}
	private void adjustDay(){
		//__call_invariant();
		//scope(exit)__call_invariant();
		switch(day){
			case 29:
				if(month == 2 && !leapYear(year)) day = 28;
				break;
			case 30:
				if(month == 2) day = 28+leapYear(year);
				break;
			case 31:
				if(month == 2) day = 28+leapYear(year);
				break;
			default:
				break;	
		}
	}


}



int add(int x,int y)
in{
	if(x > 1){
		writeln("x is bigger than 1");
	}
}
out(result){
	if(result > 10) {
		writeln("result > 10");
	}
}
body{
	return x+y;
}

class BasicDate {
	private uint day,month,year;
	string format(string spec)
	in{
		writeln("fath");
		assert(spec == "%Y/%m%d");
	}
	body{
		return text(year,'/',month,'/',day);
	}
}
class Mydate:BasicDate{
	override string format(string spec)
	in{
		writeln("son");
		auto parttern = regex("(%[mdY%]|[^%])*");
		assert(!match(spec,parttern).empty);
	}{
		string result;

		return result;
	}

}



void main() {
	//test assert
	//enforce(false,"enforce false ");
	auto d = new Date();
	d.year = 2000;
	d.month = 12;
	d.nextMonth();
	writeln(d);

	int a = 1;
	int b = 1;
	assert(a == b);	
	//test in out
	auto c = add(11,2);

}


© 著作权归作者所有

共有 人打赏支持
轻舞凋零
粉丝 13
博文 100
码字总数 16794
作品 0
昌平
程序员
10月编程语言排行榜:不成大器的D语言

【51CTO独家特稿】今天Tiobe发布了2011年10月编程语言排行榜,本期排行榜我们看到Lua这门语言蹿升很快,而传统的竞争对手C#和PHP正在交替自己的位置。Assembly(汇编语言)正在大踏步的向后退...

zjf_sdnu
2011/10/17
0
0
系统级编程语言性能大PK的笑话-Go语言

喜欢和不喜欢Go语言的都喜欢拿性能PK说事. 流传比较广的是benchmarksgame的PK数据: http://benchmarksgame.alioth.debian.org/u64q/go.php 在 benchmarksgame测试中, Go语言的性能已经由之前...

chai2010
2013/08/06
0
7
Dlang 2.080.0 版本发布,系统级编程语言

近期D语言在版本发布迭代速度上有明显提升,此次D语言 2.080.0 版本更新特性如下: 增强编译时特性可用性 提供更好的 Objective-C 兼容 废弃一些早期版本不推荐使用的类和方法 对标准库的多方...

冰力
05/13
0
0
C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

  上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/3922668.html。   下面...

雲霏霏
2014/08/19
0
0
WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)

[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]在.NET Framework 2.0中,泛型第一次被引入。我们可以定义泛型接口、泛型...

长平狐
2012/09/04
108
0

没有更多内容

加载失败,请刷新页面

加载更多

AIX 系统 (资源)

AIX--zabbix agent的编译安装以及遇到的“坑” 荐 : http://blog.51cto.com/lythjq/2128354 AIX--操作系统安装(AIX 6.1) : http://blog.51cto.com/lythjq/2128119...

寰宇01
41分钟前
0
0
Spring 转换 model 为 json 时增加属性

缘起 目前的项目中有个需求是在附件对象转换成 json 时增加个 url 属性,以前的方式是在返回附件对象或列表时候做一次统一处理,这次想看看 spring 或者 jackson fasterxml 是否自带类似功能...

郁也风
41分钟前
1
0
10大PHP比特币开源项目

如果你是一个Phper,如果你希望学习区块链,那么本文列出的 10个开源的Php比特币项目,将有助于你了解在自己的应用中 如何加入对比特币的支持。 如果你希望快速掌握使用Php对接比特币钱包的方...

汇智网教程
今天
1
0
springclould feign客户端添加全局参数

用springclould feign作为调用服务的客户端,一般来说参数可以写在feignclient的方法参数里 有时需要所有feign请求都统一添加一些参数,例如token用于鉴权等,可以这样做: 添加一个配置类,...

canneljls
今天
1
0
win32截屏并rgb24转yuv420

//最终f的内存布局为BGRA格式,需要保证buf长度足够(>w*h*4)void ScreenCap(void* buf, int w, int h){ HWND hDesk = GetDesktopWindow(); HDC hScreen = GetDC(hDesk); ......

styleman
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部