これ使ったら結構コードの質上がるんじゃないかと思って、マクロで作ってみました。
(事前条件と事後条件のみです)
特殊展開マクロに感謝です。
#define global requires(%1) \ if ((%1) == 0) : \ dialog "\"require\" error in line " + __LINE__ : \ end #define global ensures(%1) %tcontract %s1 #define global returns(%1) %tcontract \ ret = %1 :\ if ((%o) == 0) : \ dialog "\"ensures\" error in line " + __LINE__ : end : \ else : return %1 //サンプル #module #defcfunc ascii_code str _char requires strlen(_char) == 1 //事前条件 //ensuresのretは関数の戻り値 ensures (ret >= 'A' && ret <= 'z') || (ret >= 'a' && ret <= 'z') //事後条件 char = _char code = peek(char, 0) //code = 10 //事後条件を満たさないからエラー returns code //ensuresを使う場合はreturnではなくreturns #global mes ascii_code("a") mes ascii_code("A") //mes ascii_code("abc") //事前条件を満たさないからエラー //mes ascii_code("ABC")