d语言之契约编程
d语言之契约编程
轻舞凋零 发表于2年前
d语言之契约编程
  • 发表于 2年前
  • 阅读 42
  • 收藏 0
  • 点赞 1
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

摘要: d语言之契约编程

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语言
共有 人打赏支持
粉丝 13
博文 99
码字总数 16794
×
轻舞凋零
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: