Bơm mồi là gì? Đôi khi được gọi là đọc mồi


17

Tôi đã được dạy cách diễn đạt này và cách trở lại trong ngày. Chắc chắn, cái tên này xuất phát từ những máy bơm cũ cần được đổ đầy nước trước khi họ có thể bơm nước, nhưng ai quan tâm? Chúng ta đang nói về mã ở đây.

Một số ví dụ thực sự tốt và một lời giải thích về những gì mô hình hoàn thành sẽ được hoan nghênh. Làm thế nào là mô hình này được coi là ngày hôm nay?

Việc sơn lót đôi khi có thể khiến một vòng lặp bị lỗi hoạt động nhưng với chi phí là DRY . Vì vậy, nó có thể là một điểm dừng ngắn trên đường đến một thiết kế tốt hơn. Đây có được coi là một mô hình chống? Có những lựa chọn thay thế?


1
Bạn sẽ tìm thấy thuật ngữ "mồi máy bơm" trong câu trả lời stackoverflowmột cuốn sách . Thuật ngữ "đọc mồi", được tìm thấy ở đây , có vẻ giống nhau.
candied_orange

Câu trả lời:


23

Ẩn dụ này gần như chắc chắn đề cập đến việc thực hành thiết lập kiểm tra có điều kiện đầu tiên trong một whilevòng lặp. Nếu bạn không làm điều này, vòng lặp sẽ không hoạt động. Đó là một mô hình được thiết lập tốt và nó đã không thay đổi kể từ khiwhile vòng lặp được phát minh. Yêu cầu thiết lập điều kiện ban đầu trong một whilevòng lặp không phải là một khiếm khuyết.

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

Các primer có thể là một câu lệnh đọc hoặc bất cứ điều gì đặt đúng điều kiện ban đầu. Đặt điều kiện ban đầu bằng cách sử dụng câu lệnh đọc được gọi là "Đọc mồi".

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

Trong C #, hai Readline()cuộc gọi có thể được kết hợp thành một câu lệnh trong điều kiện:

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

1
Đẹp. Có những lúc bạn cần làm A và B để kiểm tra T chính xác giữa chúng. Mẫu A T(B A)mồi thông thường thực hiện điều này nhưng lại trùng lặp A. Có sự thay thế chung nào cho mẫu chung này không?
candied_orange

2
Xem đoạn mã cuối cùng trong câu trả lời của tôi.
Robert Harvey

Đó là một cổ điển. Bạn có bao giờ đề nghị sử dụng nghỉ ngơi?
candied_orange

Tôi không phản đối việc thoát sớm khỏi vòng lặp nếu làm như vậy để đơn giản hóa mã. Đôi khi bạn có thể chỉ return.
Robert Harvey

1
Một ví dụ sẽ tìm kiếm sự xuất hiện đầu tiên của một chuỗi trong mỗi dòng của tệp văn bản. Bạn vẫn sẽ cần whilevòng lặp, nhưng một khi bạn tìm thấy chuỗi trong dòng bạn vừa đọc, bạn có thể breakhoặc return.
Robert Harvey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.