수익률 키워드가 왜 그 자체가 아닌 return 및 break와 함께 사용됩니까?


11

C #에서는 리턴 유형을 IEnumerable<T>사용 하여 메소드를 구성 하고 플로우를 사용 yield return하고 yield break제어 할 수 있습니다. 다음은 두 컨트롤을 모두 사용하는 간단한 예입니다.

public IEnumerable<int> GetEvens(int start, int end) {
    if(end < start)
        yield break;

    if(start & 2 != 0)
        start++;

    for(int i = start; i <= end; i+=2) {
        yield return i;
    }        
}

제 질문은 왜 원래 두 개의 키워드를 사용 yield하고 단일 yield"반환 값을 산출하는" 키워드로 다음과 같이 사용하지 않도록 설계된 것입니다 .

public IEnumerable<int> GetEvens(int start, int end) {
    if(end < start)
        return; // stop completely and return nothing

    if(start & 2 != 0)
        start++;

    for(int i = start; i <= end; i+=2) {
        yield i; // yield the current value.
    }        
}

나에게 이것은 읽고 이해하는 것이 더 간단합니다.

답변:


13

"수율"이라는 단어를 식별자 (변수 이름)로 사용한 기존 코드가 깨지지 않도록 약간 어색한 yield return구문이 만들어졌습니다 . (예를 들어, 재무 코드로 작업하는 경우 이름이 지정된 변수를 갖는 것이 가장 의미 가 있습니다.) "수익률 반환"은 구문 오류 였을 것이므로 새 구문은 기존 코드를 손상시키지 않습니다.yield

에 대해서는 yield break전혀 모른다. 그것은 내가 찾을 수있는 좋은 이유가없는 것 같습니다.


yield x;당시 구문 오류가 아니 었 습니까?
Moop

1
@Moop : 그것을 만들면 yield return구문 오류인지 아닌지를 생각할 필요조차 없습니다. 충돌 가능성이 0이됩니다.
Robert Harvey

2
"수율 나누기"의 경우 본질적으로 "반환;" void 메소드에서 "return;"사용 "수율 반환"과 함께 혼란 스러울 수 있습니다. 따라서 "수익률 브레이크"를 선택하면 "수익률 리턴"을 선택하게됩니다.
Cyanfish

3
라는 이름의 유형이 있다면 @Moop yield다음 yield x;구문 오류가 없을 것이지만, 유효한 변수 선언.
보얀 레스 닉

1
@moop :도 참조 ericlippert.com/2009/05/11/reserved-and-contextual-keywordsblogs.msdn.com/b/ericlippert/archive/2010/09/27/... 경우 않고 새로운 키워드를 도입의 주제 관심있는 코드를 깨는 것.
Eric Lippert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.