web-dev-qa-db-ja.com

ポンプのプライミングとは何ですか?プライミングリードと呼ばれることもあります

昔、この表情や模様を教えられました。確かに、その名前は、ポンプで水を送る前に水で満たす必要があった古いポンプに由来していますが、誰が気にするのですか?ここではコードについて話します。

いくつかの本当に良い例と、パターンが達成することの説明を歓迎します。このパターンは今日どのように考えられていますか?

プライミングは、欠陥のあるループを機能させることがありますが、 [〜#〜] dry [〜#〜] を犠牲にします。したがって、より良いデザインへの道のりの短い一時停止かもしれません。これはアンチパターンと見なされますか?代わりはありますか?

17
candied_orange

この比喩は、ほぼ間違いなく、whileループで最初の条件付きチェックを確立する慣行を指します。これを行わないと、ループは機能しません。これは十分に確立されたパターンであり、whileループが発明されてから変更されていません。 whileループで初期条件を設定するための要件は欠陥ではありません。

_int i = 0; // prime the pump
while (i < 10)
{
    Console.Write("While statement ");
    Console.WriteLine(i);
    i++; // set condition again
}
_

プライマーは、readステートメント、または初期条件を適切に設定するものにすることができます。読み取りステートメントを使用して初期条件を設定することを「プライミング読み取り」と呼びます。

_string line;

using (StreamReader file = new StreamReader("c:\\test.txt"))
{
    line = file.ReadLine(); // Priming read.
    while(line != null)
    {
        Console.WriteLine (line);
        line = file.ReadLine(); // Subsequent reads.   
    }
}
_

C#では、2つのReadline()呼び出しを条件内で1つのステートメントに組み合わせることができます。

_while ((line = r.ReadLine()) != null)
{
    Console.WriteLine (line);
}
_
23
Robert Harvey