문제

참고:의"순수한"기능을 의미하지 않는 컴
나는

는 경우"기능"를 읽고 일부는 글로벌 상태가 자동으로 렌더링 그것은 불순?는가에 따라 달라집 다른 요인입니까?

는 경우 자동으로 렌더링하는것은 불순,그 이유를 설명해 주십시오.

경우에 따라 달라집 다른 요인이 무엇인지 설명해주십시오 그들은.

도움이 되었습니까?

해결책

"순수한"함수는 결과가 의존하는 함수입니다. 입력 인수에. 그것이 다른 것을 읽는다면, 그것은 순수한 기능이 아닙니다.

다른 팁

특정 특수 사례에서는 그렇습니다. 예를 들어, 기능으로 만 읽고 작성된 이미 컴퓨터 값의 전역 캐시가 있다면 출력이 입력에만 의존한다는 의미에서 여전히 수학적으로 순수하지만 순수하지는 않습니다. 가장 엄격한 의미에서. 예를 들어:

static int cache[256] = {0};
int compute_something(uint8_t input)
{
    if(cache[input] == 0)
        cache[input] = (perform expensive computation on input that won't return 0);
    return cache[input];
}

이 경우 다른 함수가 글로벌에 닿지 않는 한 cache, 기술적으로 외부 글로벌 상태에 의존하더라도 여전히 수학적으로 순수한 기능입니다. 그러나이 상태는 성능 최적화 일뿐입니다. 이는 여전히 더 느리게 동일한 계산을 수행합니다.

순수한 표현을 구성하려면 순수한 기능이 필요합니다. 일정한 표현은 정의에 따라 순수합니다.

따라서 글로벌 '상태'가 변하지 않으면 괜찮습니다.

또한 참조하십시오 참조 투명성:

보다 미묘한 예는 결과를 계산하는 데 도움이되는 글로벌 변수 (또는 동적으로 스코핑 된 변수 또는 어휘 폐쇄)를 사용하는 함수의 예입니다. 이 변수는 매개 변수로 전달되지 않지만 변경 될 수 있으므로 매개 변수가 동일하더라도 함수에 대한 후속 호출 결과가 다를 수 있습니다. (순수한 기능 프로그래밍에서는 파괴적인 할당이 허용되지 않습니다. 따라서 글로벌 (또는 동적으로 범위화 된) 변수를 사용하는 함수는 이러한 변수가 변경 될 수 없기 때문에 여전히 참조적으로 투명합니다.)

용에 대한 인스턴스를 만들 수 있습니다,끝없는 목록을 임의의 숫자에 불순한 측면을 전달하는 목록의 순수한 기능입니다.구현을 생성하는 다수의 순수한 기능을 사용하여 필요한 경우에만 그것은,그러나 기능은 여전히 순수하다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top