Qu'est-ce que l'amorçage de la pompe? Parfois appelée lecture d'amorçage


17

On m'a appris cette expression et ce modèle à l'époque. Bien sûr, le nom vient de vieilles pompes qui devaient être remplies d'eau avant de pouvoir pomper de l'eau, mais qui s'en soucie? Nous parlons de code ici.

De très bons exemples et une explication de ce que le modèle accomplit seraient les bienvenus. Comment ce modèle est-il considéré aujourd'hui?

L'amorçage peut parfois faire fonctionner une boucle défectueuse, mais au prix de SEC . Il peut donc s'agir d'un bref arrêt sur la voie d'un meilleur design. Est-ce considéré comme un motif anti? Existe-t-il des alternatives?


1
Vous trouverez le terme "amorçage de la pompe" dans une réponse stackoverflow et un livre . Le terme "amorçage lu", trouvé ici , semble à peu près le même.
candied_orange

Réponses:


23

Cette métaphore se réfère presque certainement à la pratique consistant à établir la première vérification conditionnelle dans une whileboucle. Si vous ne le faites pas, la boucle ne fonctionnera pas. C'est un modèle bien établi et il n'a pas changé depuis que la whileboucle a été inventée. L'obligation de définir la condition initiale dans une whileboucle n'est pas un défaut.

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

L'amorce peut être une instruction de lecture, ou tout ce qui définit correctement la condition initiale. La définition de la condition initiale à l'aide d'une instruction de lecture est appelée "lecture d'amorçage".

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.   
    }
}

En C #, les deux Readline()appels peuvent être combinés en une seule instruction dans le conditionnel:

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

1
Agréable. Il y a des moments où vous devez faire A et B dans l'ordre avec un test T exactement entre eux. Le A T(B A)modèle d'amorçage habituel fait cela mais reproduit A. Des alternatives générales à ce modèle général?
candied_orange

2
Voir le dernier morceau de code dans ma réponse.
Robert Harvey

Celui-là est un classique. Souhaitez-vous jamais suggérer d'utiliser une pause?
candied_orange

Je ne suis pas opposé aux sorties précoces d'une boucle si cela simplifie le code. Parfois, vous pouvez simplement return.
Robert Harvey

1
Un exemple serait de rechercher la première occurrence d'une chaîne dans chaque ligne d'un fichier texte. Vous auriez toujours besoin de la whileboucle, mais une fois que vous avez trouvé la chaîne dans la ligne que vous venez de lire, vous pouvez soit breakou return.
Robert Harvey
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.