このプログラミング手法は何と呼ばれていますか?


13

インタビューでペアプログラミングを行っているときにこのプログラミング手法に出会い、Googleでその名前を見つけることができませんでした。

考え方は、最初に変数を使用する式を記述し、その後変数を計算するコードを記述することです。

ここでいくつかのサンプルコードを使用するには:

private bool ValidPolicyNumber(string policyNumber) 
{
    var hasExpectedPrefix = policyNumber.Substring(0,5) == "POLIC";
    var followedBy7Digits = Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$");
    var hasLengthOf12 = policyNumber.Length == 12;

    return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;
}

前述の手法を使用してこの関数を記述する場合、最初に最後の行return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;を記述し、次にその前の3行を記述します。

私が見つけた最も近い技術は「希望的観測」であり、それはSICPからのものですが、後で初期化する変数を使用するのではなく、後で実装する関数の呼び出しに関連しています。


8
これは単なるトップダウンデザインの一形態であると思います。
ビンセントサバード

1
特定の名前はわかりませんが、複雑な一連の条件を確認する必要があるときによく見ます。この手法により、複雑な条件の読み取りと理解がはるかに容易になります。
FrustratedWithFormsDesigner

これをやった。コードを使用して、最初は詳細を気にせずにアイデアをスケッチします。その後、IDEは何かが存在しないと不平を言うので、それを存在させます。終了するまでテストが失敗する場合に役立ちます。
candied_orange

これに単体テストが先行する場合、テスト駆動開発になります。TDDを使用するとき、私は予想される結果を知っており、その予想される動作から逆戻りします。
マーティンスパマー

私はそれを「複雑な条件を正気に書く」と呼びます。
ジミーブレックマッキー

回答:


13

機能構成の単なるバリエーションです。

証人:

private bool ValidPolicyNumber(string policyNumber) 
{
    return hasExpectedPrefix(policyNumber) 
        && followedBy7Digits(policyNumber) 
        && hasLengthOf12(policyNumber);
}

private bool hasExpectedPrefix(string policyNumber)
{
    return policyNumber.Substring(0,5) == "POLIC";
}

private bool followedBy7Digits
{
    return Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$");
}

private bool hasLengthOf12
{
    return policyNumber.Length == 12;
}

唯一の本当の違いは、ご使用のバージョンが、より小さな関数の計算結果を単一の関数スコープに結合することです。これは、より小さな関数式が他の場所で再利用される場合を除き、必要なものです。


9

これはClean Code(本)からの提案に過ぎず、機能の分解(Robertが説明したように)が機能自体が再利用できないために適用できない場合に使用されます。

ただし、それについて技術的に知りたい場合は、Kent Beckによる書籍Implementation Patternsで、この手法をExplaining Local Variables(emphasis mine)と名付けています。

ローカル変数

ローカル変数は、宣言点からスコープの終わりまでしかアクセスできません。情報はできるだけ拡散しないという原則に従って、ローカル変数を使用する直前で、可能な限り最も内側のスコープでローカル変数を宣言します。

ローカル変数には、いくつかの一般的な役割があります。

  • コレクター:後で使用するために情報を収集する変数。多くの場合、コレクターの内容は関数の値として返されます。コレクターが返される場合、結果または結果に名前を付けます。

  • カウント:他のオブジェクトのカウントを収集する特別なコレクター。

  • 説明:複雑な式がある場合、式のビットをローカル変数に割り当てると、読者は複雑さをナビゲートするのに役立ちます。

    int top = ...;

    int left = ...;

    int height = ...;

    int bottom = ...;

    新しいRectangle(top、left、height、width);

    計算上必要ではありませんが、説明するローカル変数は、そうでなければ長く複雑な式になるものを助けます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.