Functional Java는 Java에서 함수형 프로그래밍을 용이하게 하는 오픈 소스 라이브러리입니다. 라이브러리는 구성 지향 개발을 지원하는 다양한 기본 및 고급 프로그래밍 추상화를 구현합니다. Functional Java는 친숙한 언어를 사용하여 이러한 개념을 소개함으로써 함수형 프로그래밍 개념을 학습하기 위한 플랫폼 역할도 합니다.
이 라이브러리는 프로덕션 애플리케이션에서 사용하기 위한 것이며 ScalaCheck 및 Functional Java의 Quickcheck 모듈을 사용한 자동화된 사양 기반 테스트 기술을 사용하여 철저하게 테스트되었습니다.
Functional Java는 다음 유형에 대한 추상화를 제공합니다.
기본 데이터 구조 - 전체 및 부분 함수, 제품, 단위, 옵션, 편향되지 않은 및 우편향된 결합(둘 중 하나 및 검증), 무효입니다.
불변 컬렉션 - 배열, 목록, 벡터, 스트림, 집합, 맵, 우선 순위 대기열, 핑거 트리, 이종 목록, 차이 목록.
기타 추상화 - 모노이드, 세미그룹, 자연, 난수 생성기, 판독기, 기록기, 상태, 입력/출력, 파서, 지퍼, 사양 기반 테스트(빠른 확인), 액터, 광학(렌즈, 프리즘, 폴드, 순회 및 기타), 동시성 그리고 유형 변환.
프로젝트의 중요한 URL은 다음과 같습니다.
웹사이트, http://www.functionjava.org
웹사이트 저장소, http://github.com/functionjava/functionjava.github.io
Travis 지속적 통합 빌드, https://app.travis-ci.com/github/functionjava/functionjava
Sonatype 저장소, https://oss.sonatype.org/content/groups/public/org/functionjava/
Maven 중앙 저장소, https://mvnrepository.com/artifact/org.functionjava/functionjava
프로젝트를 다운로드하고 사용하는 권장 방법은 빌드 도구를 이용하는 것입니다.
Functional Java 아티팩트는 세 가지 게시된 아티팩트와 함께 org.functionaljava
그룹을 사용하여 Maven Central에 게시됩니다.
핵심 라이브러리( functionaljava
)
속성 기반 테스트( functionaljava-quickcheck
)
소량의 Java 8 지원( functionaljava-java-core
)
최신 안정 버전은 5.0
입니다. 종속성을 추가하여 Gradle 프로젝트에 추가할 수 있습니다.
"org.functionjava:functionjava:5.0"을 컴파일합니다. "org.functionjava:functionjava-quickcheck:5.0"을 컴파일합니다. "org.functionjava:functionjava-java-core:5.0"을 컴파일합니다.
그리고 메이븐에서는:
<의존성> <groupId>org.functionjava</groupId> <artifactId>functionjava</artifactId> <버전>5.0</버전> </의존성> <의존성> <groupId>org.functionjava</groupId> <artifactId>functionjava-quickcheck</artifactId> <버전>5.0</버전> </의존성> <의존성> <groupId>org.functionjava</groupId> <artifactId>functionjava-java-core</artifactId> <버전>5.0</버전> </의존성>
빌드는 Java 8 및 Gradle 7.4를 사용하여 수행됩니다. 루트 디렉터리에서 다음을 실행합니다.
./gradlew
이를 위해서는 Java 8에 대한 액세스가 필요하며 Gradle 빌드 도구와 필요한 종속성을 다운로드하고 FunctionalJava를 빌드합니다.
위에서 언급한 기능에 대한 자세한 설명은 다음과 같습니다.
기본 데이터 구조
배열이 1부터 8까지인 함수( fj.F
).
예외를 생성할 수 있는 0부터 8까지의 인자를 가진 함수( fj.Try
).
void 반환( fj.Effect
)이 있는 0~8 범위의 함수입니다.
void 반환이 있고 예외( fj.TryEffect
)를 발생시킬 수 있는 0부터 8까지의 인자를 가진 함수입니다.
계수가 1~8인 제품( fj.P
).
단위 유형( fj.Unit
).
선택적 값 - 유형이 안전한 null ( fj.data.Option
).
분리된 공용체 데이터 유형 - 구성적 예외 처리 ( fj.data.Either
).
유효성 검사 - 오른쪽 편향 구성 예외 처리( fj.data.Validation
).
불변 컬렉션
배열 래퍼( fj.data.Array
).
불변의 메모리 내 단일 연결 목록( fj.data.List
).
불변의 게으른 단일 연결 목록( fj.data.Stream
).
영구 시퀀스의 기능적 표현을 위해 2-3개의 핑거 트리를 제공하는 패키지( fj.data.fingertrees
)는 상환된 O(1) 시간 내에 끝 부분에 대한 액세스를 지원합니다.
유형 안전성을 희생하지 않고 다양한 유형의 요소 목록을 위한 유형 안전 이종 목록( fj.data.hlist
)입니다.
빨간색/검은색 트리( fj.data.Set
)를 사용하여 불변 세트 구현.
불변 다방향 트리 - 일명 장미 나무( fj.data.Tree
).
빨간색/검은색 트리 구현( fj.data.TreeMap
)을 사용하는 불변 트리 맵입니다.
핑거 트리( fj.data.PriorityQueue
)를 사용하는 불변 우선순위 큐.
차이점 목록, 성능이 뛰어난 목록입니다.
기타 추상화
모노이드( fj.Monoid
).
세미그룹( fj.Semigroup
).
자연수 데이터 유형( fj.data.Natural
).
선형 합동 생성기 ( fj.LcgRng
)를 사용하는 난수 생성기.
Reader, Writer 및 State 모나드( fj.data.Reader
, fj.data.Writer
, fj.data.State
).
IO 추상화를 위한 입력/출력 모나드( fj.IO
).
컴포지션을 사용하여 더 작은 파서를 결합하여 파서를 작성하기 위한 모나딕 파서 결합자입니다.
데이터 유형을 표준 Java 유형으로/에서 변환합니다.
FunctionalJava와 Java 8 특정 유형 간의 변환.
HashMap 및 HashSet에 대해 구성 가능한 동등성 및 해시 코드.
스트림과 트리에 대한 지퍼 구현.
자동화된 사양 기반 테스트 프레임워크( fj.test
).
병렬 계산( fj.control.parallel
) 및 병렬 맵, 맵 축소, 병렬 압축과 같은 계층화된 추상화를 위한 완전 작동 액터입니다.
렌즈, 프리즘, ISO, 옵션, 순회, 게터, 폴드 및 세터를 포함한 불변 데이터를 업데이트하기 위한 광학 장치입니다. Scala Monocle 라이브러리(https://github.com/julien-truffaut/Monocle) 및 Haskell 렌즈 라이브러리(https://github.com/ekmett/lens)에서 영감을 받았습니다.
공허(Void), 논리적으로 사람이 살지 않는 유형.
Functional Java 라이센스는 https://en.wikipedia.org/wiki/BSD_licenses에서 제공되는 BSD 3 라이센스(3절 라이센스)를 사용합니다.
각 버전의 릴리스 정보는 etc/release-notes 디렉토리 링크를 참조하십시오.