이 프로그래밍 기술은 무엇입니까?


13

인터뷰에서 페어 프로그래밍을하는 동안이 프로그래밍 기술을 발견했으며 Google에서 이름을 찾을 수 없었습니다.

아이디어는 먼저 변수를 사용하는 표현식을 작성한 다음 나중에 변수를 계산하는 코드를 작성한다는 것입니다.

예제 코드를 사용하려면 다음을 수행하십시오.

private bool ValidPolicyNumber(string policyNumber) 
{
    var hasExpectedPrefix = policyNumber.Substring(0,5) == "POLIC";
    var followedBy7Digits = Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$");
    var hasLengthOf12 = policyNumber.Length == 12;

    return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;
}

앞서 언급 한 기술을 사용하여이 함수를 작성할 때는 먼저 마지막 줄 return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;을 쓴 다음 그 앞에 나오는 3 줄을 쓰십시오.

내가 찾을 수있는 가장 가까운 기술은 "소중한 사고"이며 SICP에서 나온 것이지만 나중에 초기화 할 변수를 사용하는 대신 나중에 구현할 함수를 호출하는 것과 관련이 있습니다.


8
나는 이것이 일종의 하향식 디자인 이라고 믿는다 .
Vincent Savard

1
구체적인 이름을 모르지만 복잡한 조건 집합을 확인해야 할 때 종종이 사실을 자주 보았습니다. 이 기술을 사용하면 복잡한 조건을보다 쉽게 ​​읽고 이해할 수 있습니다.
FrustratedWithFormsDesigner

나는 이것을했다. 코드를 사용하여 처음에 세부 사항을 땀 흘리지 않고 아이디어를 스케치합니다. 나중에 IDE는 무언가가 존재하지 않는다고 불평하므로 존재하게하십시오. 시험을 마칠 때까지 실패 할 때 도움이됩니다.
candied_orange

이것이 단위 테스트보다 먼저 이루어지면 테스트 주도 개발이 될 것입니다. TDD를 사용할 때 예상되는 결과를 알고 예상되는 동작에서 뒤로 작업합니다.
Martin Spamer

나는 "복잡한 조건을 산만하게 작성"이라고 부릅니다.
Jimmy Breck-McKye

답변:


13

기능 구성 의 변형 일뿐 입니다.

증거:

private bool ValidPolicyNumber(string policyNumber) 
{
    return hasExpectedPrefix(policyNumber) 
        && followedBy7Digits(policyNumber) 
        && hasLengthOf12(policyNumber);
}

private bool hasExpectedPrefix(string policyNumber)
{
    return policyNumber.Substring(0,5) == "POLIC";
}

private bool followedBy7Digits
{
    return Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$");
}

private bool hasLengthOf12
{
    return policyNumber.Length == 12;
}

유일한 차이점은 버전에서 작은 함수의 계산 결과를 단일 함수 범위로 결합한다는 것입니다. 작은 함수 식을 다른 곳에서 재사용하지 않는 한 원하는 것입니다.


9

이것은 (로버트가 설명한 것처럼) 기능 분해가 자체적으로 재사용 할 수 없기 때문에 적용 할 수 없을 때 사용되는 Clean Code (책)의 제안 일 수 있습니다.

그러나 켄트 벡 (Kent Beck) 의 " 구현 패턴 (Simplementation Patterns)" 이라는 책 에서이 기술을 기술하고 싶다면 이 기술의 이름을 지역 변수 설명 (강조 광산)이라고한다.

지역 변수

지역 변수는 선언 지점에서 범위 끝까지 만 액세스 할 수 있습니다. 정보가 가능한 한 적게 퍼져 야한다는 원칙에 따라, 사용되기 직전의 가능한 범위 내에서 지역 변수를 선언하십시오.

지역 변수에 대한 몇 가지 공통 역할이 있습니다.

  • 수집기 : 나중에 사용하기 위해 정보를 수집하는 변수입니다. 수집기의 내용은 종종 함수의 값으로 반환됩니다. 콜렉터가 리턴 될 때 결과 또는 결과의 이름을 지정하십시오.

  • 개수 : 다른 개체의 개수를 수집하는 특수 수집기입니다.

  • 설명 : 복잡한식이있는 경우 식의 비트를 로컬 변수에 할당하면 독자가 복잡성을 탐색하는 데 도움이 될 수 있습니다.

    int top = ...;

    int left = ...;

    int 높이 = ...;

    int bottom = ...;

    새 사각형을 반환합니다 (위, 왼쪽, 높이, 너비);

    계산적으로 필요하지는 않지만 지역 변수를 설명하면 길고 복잡한 표현이 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.