자바 함수형 프로그래밍 예제

함수형 프로그래밍은 불변성을 선호하므로 상태가 변경될 수 없습니다. 일반적으로 명령적 함수가 상태(예: Java 인스턴스 변수)와 연결될 수 있는 명령적 프로그래밍에서는 그렇지 않습니다. 이 함수를 동일한 인수로 다른 시간에 호출하면 이 경우 상태가 변경 가능하므로 반환 값이 다를 수 있습니다. 이 `테스트` 함수에는 함수형식이 있습니다. Javadoc에서는 테스트 함수가 실제로 조건자 형식인 것을 볼 수 . 그러나 이것은 하나의 매개 변수를 취하고 부울을 반환하는 모든 함수에 대한 짧은 형식일 뿐입니다. 이 자습서에서는 함수형 프로그래밍의 기본 을 제공합니다. 먼저 용어로 시작하여 함수형 프로그래밍 개념을 살펴보겠습니다. 5가지 기능적 프로그래밍 기법을 소개합니다.

이 섹션의 코드 예제를 통해 순수 함수, 고차 함수, 지연 평가, 닫기 및 커리를 시작할 수 있습니다. 순수 함수는 입력 인수에만 의존하며 외부 상태에 의존하지 않는 함수형 프로그래밍 함수입니다. 불순한 함수는 이러한 요구 사항 중 하나를 위반하는 함수형 프로그래밍 함수입니다. 순수 함수는 다른 순수 함수를 호출하는 것 외에도 외부 세계와 상호 작용하지 않으므로 순수 함수는 항상 동일한 인수에 대해 동일한 결과를 반환합니다. 순수 함수는 또한 관찰 가능한 부작용이 없습니다. 따라서 null이 Java 8에서 문제를 줄 때마다 선택 사항으로 이동하여 잠재적으로 비어있는 매직 박스에 변환 함수를 적용하는 것을 주저하지 마십시오. 클린 코드 규칙은 다음과 같은 대상이 됩니다. 대신 함수가 호출자에게 반환 값이 없을 수 있음을 알리려고 할 때마다 Optional을 반환합니다.

그러나 많은 사용 사례에 대해 유사한 코드를 반복적으로 작성할 가능성이 있기 때문에이 코드를 자랑스럽게 생각하지는 않습니다. 자바 8 : 컬렉션 클래스와 비교자 인터페이스를 사용하여 상용구를 자르자 자바 8에서 향상되었습니다. 비교기는 @FunctionalInterface 함께 추가됩니다. 컬렉션의 정렬 메서드는 비교를 인수로 사용합니다. 목록 1은 몇 명의 Employee 개체를 생성한 다음 50세 미만의 모든 직원 목록을 인쇄하는 Employees 응용 프로그램을 보여 줍니다. 이 코드는 개체 지향 및 함수형 프로그래밍 스타일을 모두 보여 줍니다. 한 가지 확실한 점은 “Lambda 표현이 기존 Java 생태계와 완벽하게 결합된다”는 것입니다. 명령적 프로그래밍에서 한 가지 일반적인 부작용은 할당 문이 저장된 값을 변경하여 변수를 변이하는 경우입니다. 함수형 프로그래밍의 함수는 변수 할당을 지원하지 않습니다. 변수의 초기 값은 변경되지 않으므로 함수형 프로그래밍은 이러한 부작용을 제거합니다. printEmployee2() 메서드는 Streams API로 구현된 선언적 표현식 지향 접근 방식을 보여 줍니다.

직원을 인쇄하는 방법(단계별)을 지정하는 대신 표현식은 원하는 결과를 지정하고 Java에 수행하는 방법에 대한 세부 정보를 남깁니다. filter()는 if 문과 기능적으로 동등한 것으로 생각하고 forEach()는 for 문과 기능적으로 동일합니다. 따라서 Java는 함수와 같은 새로운 클래스를 제공했을 수도 있지만 그렇지 않습니다. Java는 lambda 식을 할당하려면 하나의 추상 메서드가있는 인터페이스가 있어야하며 컴파일러는 자동으로 감지하여 해당 인터페이스 참조 변수에 할당합니다. 람다 표현식은 Java 8의 가장 많이 언급되는 기능입니다. Lambda 표현식은 이전 버전에서 사용했던 것과 비교하여 Java 8에서 코드를 작성하는 방식을 크게 변경합니다. 다시 말하지만, 우리는 실제로 BiFunction라는 자바에서 정의 된 동등한 인터페이스가 있기 때문에 TakeTwo를 정의 할 필요가 없습니다. 그것을 사용 하 여 우리는 다음과 같은 방법으로 합계를 작성할 수 있습니다. 함수형 프로그래밍의 정신을 이해하려면 순수 함수라고 부르는 것과 가장 잘 어기는 다는 것을 알아야 합니다: Java 8은 Java 개발자에게 람다 식을 사용하여 함수형 프로그래밍을 도입했습니다.