voile.judge

judgement モジュール
複数の要素でチェックを行いたい場合に使用することのできる Judgement が利用可能
Date: September 08, 2011
Authors: P.Knowledge, SHOO
License: NYSL ( http://www.kmonos.net/nysl/ )
class JudgementException: object.Exception;
審判を含めて投げることのできる例外
投げる際にJudgementオブジェクトを含めて投げることが可能です。
 auto dJudge = new Judgement;
 ...
 if (dJudge.bad)
 {
     throw new JudgementException(dJudge);
 }
Judgement judgement;
Judgementオブジェクトへのアクセス
this(Judgement aJudge, string file = null, int line = 0);
コンストラクタ
Object[] results();
See Also: Judgement.result()
int opApply(int delegate(ref Object) dg);
int opApply(int delegate(ref size_t, ref Object) dg);
See Also: Judgement.opApply()
class Judgement;
審判クラス
discuss() 関数の引数の結果が、存在するか否かで審判を下す。 詳しくは discuss() 関数を参照。
また、 discuss() 関数により審判を行ったあとは results() 関数で結果を得ること が可能。 results() 関数は、 discuss() を行う際の引数に指定した文字列や Object 実行する際に生じた例外などが含まれます。
ヘルパ関数の judge() 関数と with 文と if 文、 ok ステータスを使うとスマートに 見えるかも?
Example:
void checkFunc()
{
    if (a.checked && b.checked)
    {
        throw new Exception("conflict switches 'a' and 'b'.");
    }
}

void func()
{
    with (judge(checkFunc))
    {
        if (ok)
        {
            status = "OK";
        }
        else
        {
            status = "NG [" ~ messages[0].toString ~ "]";
        }
    }
}
typeof(this) discuss(T...)(lazy T args);
審議
引数を指定して審判を行います。
下記の、引数の説明にあるリストの実行結果を判定し、
  • 引数
  • 引数の実行結果
  • 引数の実行に際して生じる例外
  • 引数のdelegateやfunctionの実行結果
  • 引数のdelegateやfunctionの実行に際して生じる例外
を検出し、結果に加えます。
実行の結果、nullを返すというのが良い結果であり、戻り値が発生する場合、 審判に否決したということになります。
審判の結果は success や rejection またはそれらのすきな別名を使用して得る とが可能です。
ダイレクトに結果を得たい場合は results() 関数を呼び出すことで結果を出す 過程において生じた Object の配列を得ることが可能です。
Parameters:
T args 下記リスト参照
  • string
  • Object
  • string delegate()
  • Object delegate()
  • bool delegate()
  • void delegate()
  • string function()
  • Object function()
  • bool function()
  • void function()
  • 上記delegateおよびfunctionの実行結果
複数の指定が可能です。
引数のlazy属性によって、引数の順番通りの実行が保証されます。
必ず1つ以上の引数を指定してください。
Returns: 自分自身を返します
final @property bool certified();
alias ok = certified;
alias good = certified;
alias success = certified;
alias succeeded = certified;
合格しているか
final @property bool rejected();
alias ng = rejected;
alias bad = rejected;
alias failure = rejected;
alias failed = rejected;
否決されているか
final @property Object[] results();
結果
生じた Object のリストを返します。
審判ではこの戻り値がnullであることが望ましい。
final int opApply(int delegate(ref Object) dg);
foreach (d; judgement.result)と同義
final int opApply(int delegate(ref size_t, ref Object) dg);
foreach (i, d; judgement.result)と同義
final const string toString();
文字列を返す
Returns: results のそれぞれのオブジェクトのtoStringで得られる文字列を改行でつ ないだ文字列を返します。
final void throwIfFailure(bool doCopy = true);
例外を投げる
Throws: JudgementException=自身を含めたJudgementExceptionを投げる
Judgement judge(T...)(lazy T args);
Judgementクラスのヘルパ関数
インスタンスオブジェクトを生成し、審議し、返す。
Parameters:
T args Judgement.discuss() の引数
Returns: 審議した後の Judgement オブジェクト