할 수 있는 순수한 기능을 읽는 글로벌 상태?
-
03-07-2019 - |
문제
참고:의"순수한"기능을 의미하지 않는 컴
나는 이
는 경우"기능"를 읽고 일부는 글로벌 상태가 자동으로 렌더링 그것은 불순?는가에 따라 달라집 다른 요인입니까?
는 경우 자동으로 렌더링하는것은 불순,그 이유를 설명해 주십시오.
경우에 따라 달라집 다른 요인이 무엇인지 설명해주십시오 그들은.
해결책
"순수한"함수는 결과가 의존하는 함수입니다. 뿐 입력 인수에. 그것이 다른 것을 읽는다면, 그것은 순수한 기능이 아닙니다.
다른 팁
특정 특수 사례에서는 그렇습니다. 예를 들어, 기능으로 만 읽고 작성된 이미 컴퓨터 값의 전역 캐시가 있다면 출력이 입력에만 의존한다는 의미에서 여전히 수학적으로 순수하지만 순수하지는 않습니다. 가장 엄격한 의미에서. 예를 들어:
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
, 기술적으로 외부 글로벌 상태에 의존하더라도 여전히 수학적으로 순수한 기능입니다. 그러나이 상태는 성능 최적화 일뿐입니다. 이는 여전히 더 느리게 동일한 계산을 수행합니다.
순수한 표현을 구성하려면 순수한 기능이 필요합니다. 일정한 표현은 정의에 따라 순수합니다.
따라서 글로벌 '상태'가 변하지 않으면 괜찮습니다.
또한 참조하십시오 참조 투명성:
보다 미묘한 예는 결과를 계산하는 데 도움이되는 글로벌 변수 (또는 동적으로 스코핑 된 변수 또는 어휘 폐쇄)를 사용하는 함수의 예입니다. 이 변수는 매개 변수로 전달되지 않지만 변경 될 수 있으므로 매개 변수가 동일하더라도 함수에 대한 후속 호출 결과가 다를 수 있습니다. (순수한 기능 프로그래밍에서는 파괴적인 할당이 허용되지 않습니다. 따라서 글로벌 (또는 동적으로 범위화 된) 변수를 사용하는 함수는 이러한 변수가 변경 될 수 없기 때문에 여전히 참조적으로 투명합니다.)
용에 대한 인스턴스를 만들 수 있습니다,끝없는 목록을 임의의 숫자에 불순한 측면을 전달하는 목록의 순수한 기능입니다.구현을 생성하는 다수의 순수한 기능을 사용하여 필요한 경우에만 그것은,그러나 기능은 여전히 순수하다.