文档章节

d语言之契约编程

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:46
字数 303
阅读 44
收藏 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);

}


© 著作权归作者所有

共有 人打赏支持
上一篇: d语言之模块化
下一篇: d语言之异常
轻舞凋零
粉丝 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

没有更多内容

加载失败,请刷新页面

加载更多

Windows 10 设置 Java 环境变量

首先你需要在我的电脑中打开,找到环境变量属性。 找到环境变量属性 找到环境变量属性后单击将会看到下面的设置界面。 在这个界面中设置高级系统设置。 环境变量 在弹出的界面中选择设置环境...

honeymose
57分钟前
1
0
用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
5
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
4
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部