Apa priming pompa? Terkadang disebut priming read

17

Saya diajari ungkapan dan pola ini sejak dulu. Tentu, nama itu berasal dari pompa lama yang perlu diisi dengan air sebelum bisa memompa air, tetapi siapa yang peduli? Kita berbicara tentang kode di sini.

Beberapa contoh yang sangat bagus dan penjelasan tentang apa yang dicapai pola akan diterima. Bagaimana pola ini dianggap hari ini?

Priming kadang-kadang bisa membuat loop yang rusak berfungsi tetapi dengan biaya KERING . Jadi mungkin berhenti sebentar dalam perjalanan ke desain yang lebih baik. Apakah ini dianggap sebagai pola anti? Apakah ada alternatif?

candied_orange
sumber
1
Anda akan menemukan istilah "priming the pump" dalam jawaban stackoverflow dan sebuah buku . Istilah "priming read", ditemukan di sini , tampaknya sama.
candied_orange

Jawaban:

23

Metafora ini hampir pasti merujuk pada praktik membangun pemeriksaan bersyarat pertama dalam satu whilelingkaran. Jika Anda tidak melakukan ini, loop tidak akan berfungsi. Ini adalah pola yang sudah mapan, dan tidak berubah sejak whileloop ditemukan. Persyaratan untuk menetapkan kondisi awal dalam satu whilelingkaran bukanlah cacat.

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

Primer dapat berupa pernyataan baca, atau apa pun yang dengan tepat menetapkan kondisi awal. Menetapkan kondisi awal menggunakan pernyataan baca disebut "Baca Priming."

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

Dalam C #, dua Readline()panggilan dapat digabungkan menjadi satu pernyataan dalam kondisi:

while ((line = r.ReadLine()) != null)
{
    Console.WriteLine (line);
}
Robert Harvey
sumber
1
Bagus. Ada saat-saat ketika Anda perlu melakukan A dan B agar dengan tes T persis di antara mereka. A T(B A)Pola priming yang biasa melakukan ini tetapi menduplikasi A. Adakah alternatif umum dari pola umum ini?
candied_orange
2
Lihat sedikit kode terakhir dalam jawaban saya.
Robert Harvey
Yang itu klasik. Apakah Anda pernah menyarankan menggunakan istirahat?
candied_orange
Saya tidak menentang keluar awal dari loop jika hal itu menyederhanakan kode. Terkadang Anda bisa saja return.
Robert Harvey
1
Contoh akan mencari kemunculan pertama string di setiap baris file teks. Anda masih memerlukan whileloop, tetapi begitu Anda menemukan string di baris yang baru saja Anda baca, Anda bisa breakatau return.
Robert Harvey