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