펌프 프라이밍이란 무엇입니까? 프라이밍 읽기라고도 함


17

나는이 표현과 패턴을 배웠습니다. 물론, 그 이름은 물을 펌핑하기 전에 물로 채워야했던 오래된 펌프에서 유래 한 것입니다. 우리는 여기서 코드에 대해 이야기하고 있습니다.

정말 좋은 예와 패턴이 달성하는 것에 대한 설명은 환영받을 것입니다. 이 패턴은 오늘날 어떻게 간주됩니까?

프라이밍은 때때로 루프 작동에 결함이 생길 수 있지만 DRY가 필요 합니다. 따라서 더 나은 디자인으로가는 길에 잠시 멈출 수도 있습니다. 이것이 반 패턴으로 간주됩니까? 대안이 있습니까?


1
stackoverflow 응답book 에서 "펌프 프라이밍"이라는 용어를 찾을 수 있습니다. 여기 에있는 "priming read"라는 용어 는 거의 동일하게 보입니다.
candied_orange

답변:


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 문을 사용하여 초기 조건을 설정하는 것을 "Priming 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
좋은. 테스트 T를 정확히 수행하기 위해 A와 B를 수행해야하는 경우가 있습니다. 일반적인 A T(B A)프라이밍 패턴은이 작업을 수행하지만 A를 복제합니다.이 일반 패턴에 대한 일반적인 대안은 무엇입니까?
candied_orange

2
내 대답의 마지막 코드를보십시오.
Robert Harvey

그것은 고전입니다. 휴식 시간을 제안 하시겠습니까?
candied_orange

루프를 조기에 종료하여 코드를 단순화하는 데 반대하지 않습니다. 때때로 당신은 단지 할 수 있습니다 return.
Robert Harvey

1
텍스트 파일의 각 줄에서 문자열이 처음 나타나는 것을 예로들 수 있습니다. 여전히 while루프 가 필요 하지만 방금 읽은 줄에서 문자열을 찾으면 break또는 return.
Robert Harvey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.