D - การเขียนโปรแกรมตามสัญญา
การเขียนโปรแกรมตามสัญญาในการเขียนโปรแกรม D มุ่งเน้นไปที่การจัดหาวิธีการจัดการข้อผิดพลาดที่ง่ายและเข้าใจได้ การเขียนโปรแกรมสัญญาใน D ดำเนินการโดยบล็อกรหัสสามประเภท -
- บล็อกร่างกาย
- ในบล็อก
- ออกจากบล็อก
บอดี้บล็อคใน D
Body block มีรหัสการทำงานที่แท้จริงของการดำเนินการ บล็อกเข้าและออกเป็นทางเลือกในขณะที่บังคับบล็อกตัวถัง ไวยากรณ์ง่ายๆแสดงอยู่ด้านล่าง
return_type function_name(function_params)
in {
// in block
}
out (result) {
// in block
}
body {
// actual function block
}
อยู่ในบล็อกสำหรับเงื่อนไขเบื้องต้นใน D
ในบล็อกมีไว้สำหรับเงื่อนไขก่อนง่ายๆที่ตรวจสอบว่าพารามิเตอร์อินพุตเป็นที่ยอมรับและอยู่ในช่วงที่โค้ดสามารถจัดการได้หรือไม่ ประโยชน์ของการบล็อกคือเงื่อนไขรายการทั้งหมดสามารถเก็บไว้ด้วยกันและแยกออกจากเนื้อความจริงของฟังก์ชัน เงื่อนไขเบื้องต้นง่ายๆสำหรับการตรวจสอบรหัสผ่านสำหรับความยาวขั้นต่ำแสดงอยู่ด้านล่าง
import std.stdio;
import std.string;
bool isValid(string password)
in {
assert(password.length>=5);
}
body {
// other conditions
return true;
}
void main() {
writeln(isValid("password"));
}
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะอ่านไฟล์ที่สร้างในส่วนก่อนหน้าและสร้างผลลัพธ์ต่อไปนี้ -
true
บล็อกสำหรับเงื่อนไขการโพสต์ใน D
out block จะดูแลค่าที่ส่งคืนจากฟังก์ชัน ตรวจสอบว่าค่าที่ส่งคืนอยู่ในช่วงที่คาดไว้ ตัวอย่างง่ายๆที่มีทั้งเข้าและออกแสดงอยู่ด้านล่างซึ่งแปลงเดือนปีเป็นรูปแบบอายุทศนิยมรวมกัน
import std.stdio;
import std.string;
double getAge(double months,double years)
in {
assert(months >= 0);
assert(months <= 12);
}
out (result) {
assert(result>=years);
}
body {
return years + months/12;
}
void main () {
writeln(getAge(10,12));
}
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะอ่านไฟล์ที่สร้างในส่วนก่อนหน้าและสร้างผลลัพธ์ต่อไปนี้ -
12.8333