什么是灌注泵?有时称为预读


17

过去,我已经学会了这种表达方式和模式。当然,这个名字来自于那些老式泵,在泵水之前必须先注满水,但是谁在乎呢?我们在这里谈论代码。

我们将欢迎您提供一些非常好的示例,并对模式的完成情况进行解释。今天如何看待这种模式?

灌注有时会导致有缺陷的循环工作,但要付出DRY的代价。因此,这可能是短暂停止更好设计的途中。这被认为是反模式吗?有其他选择吗?


1
您会在stackoverflow答案一本书中找到“启动泵”一词。在此处找到的“读物准备”一词 似乎几乎相同。
candied_orange

Answers:


23

这个隐喻几乎可以肯定是指在while循环中建立第一个条件检查的做法。如果您不这样做,则循环将无法进行。 这是一种完善的模式,自从while发明了循环以来就没有改变。在while循环中设置初始条件的要求不是缺陷。

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

引物可以是读语句,也可以是适当设置初始条件的任何内容。使用read语句设置初始条件称为“ Prime 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#中,Readline()可以在条件内将两个调用合并为一个语句:

while ((line = r.ReadLine()) != null)
{
    Console.WriteLine (line);
}

1
真好 有时候,您需要进行A和B才能使它们之间的测试T准确。这样做是通常的A T(B A)启动模式,但是重复A。是否可以替代该常规模式?
candied_orange

2
请参阅我的答案中的最后一部分代码。
罗伯特·哈维

那是经典。你会建议休息一下吗?
candied_orange

如果这样做简化了代码,我不反对提前退出循环。有时候你可以return
罗伯特·哈维

1
一个示例是在文本文件的每一行中查找字符串的首次出现。您仍然需要while循环,但是一旦您在刚读的行中找到了字符串,就可以选择breakreturn
罗伯特·哈维
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.