현대의 많은 프로그래밍 언어는 폐쇄 개념 , 즉 코드 또는 블록 (블록 또는 함수) 개념을 지원 합니다.
- 값으로 취급 될 수 있으므로 변수에 저장되어 코드의 다른 부분으로 전달되고 프로그램의 한 부분에서 정의되며 동일한 프로그램의 완전히 다른 부분에서 호출됩니다.
- 변수가 정의 된 컨텍스트에서 변수를 캡처하고 나중에 호출 될 때 변수에 액세스 할 수 있습니다 (아마도 완전히 다른 컨텍스트에 있음).
스칼라로 작성된 클로저의 예는 다음과 같습니다.
def filterList(xs: List[Int], lowerBound: Int): List[Int] =
xs.filter(x => x >= lowerBound)
함수 리터럴 x => x >= lowerBound
에는 free 변수가 포함되어 있으며 lowerBound
,이 변수 는 filterList
이름이 같은 함수의 인수에 의해 닫힙니다 . 클로저는 라이브러리 메소드로 전달되어 filter
일반 함수로 반복해서 호출 할 수 있습니다.
이 사이트에서 많은 질문과 답변을 읽었으며 이해하는 한 폐쇄 라는 용어 는 종종 자동으로 기능 프로그래밍 및 기능 프로그래밍 스타일과 관련이 있습니다 .
wikipedia 에서 함수 프로그래밍의 정의는 다음과 같습니다.
컴퓨터 과학에서 기능 프로그래밍은 계산을 수학 함수의 평가로 취급하고 상태 및 변경 가능한 데이터를 피하는 프로그래밍 패러다임입니다. 상태의 변화를 강조하는 명령형 프로그래밍 스타일과 달리 함수 적용을 강조합니다.
그리고 더
함수 코드에서 [...]에서 함수의 출력 값은 함수 [...]에 입력되는 인수에만 의존합니다. 부작용을 제거하면 기능적 프로그래밍 개발의 주요 동기 중 하나 인 프로그램의 동작을보다 쉽게 이해하고 예측할 수 있습니다.
반면, 프로그래밍 언어에서 제공하는 많은 클로저 구문은 클로저가 로컬 변수가 아닌 변수를 캡처하고 클로저가 호출 될 때 변수를 변경하여 정의 된 환경에 부작용을 발생시킵니다.
이 경우 클로저는 함수형 프로그래밍의 첫 번째 아이디어 (함수는 다른 값처럼 이동할 수있는 일류 엔티티)를 구현하지만 두 번째 아이디어는 무시합니다 (부작용을 피함).
부작용 이있는 클로저 사용이 기능적 스타일로 간주됩니까 아니면 클로저가 기능적 프로그래밍 스타일과 비 기능적 프로그래밍 스타일 모두에 사용할 수있는보다 일반적인 구조로 간주됩니까? 이 주제에 관한 문헌이 있습니까?
중요 사항
부작용의 유용성이나 부작용으로 인한 폐쇄가 있는지에 대해서는 의문의 여지가 없습니다. 또한 부작용이 있거나없는 폐쇄의 장점 / 단점에 대한 토론에 관심이 없습니다.
나는 그러한 클로저를 사용하는 것이 여전히 기능적 프로그래밍의 지지자에 의해 기능적 스타일로 간주되는지 또는 반대로 기능적 스타일을 사용할 때 사용이 권장되지 않는지 알고 싶습니다.