Functional Java は、Java での関数型プログラミングを容易にするオープン ソース ライブラリです。このライブラリは、構成指向の開発を支援する多数の基本的および高度なプログラミング抽象化を実装しています。 Functional Java は、使い慣れた言語を使用して関数型プログラミングの概念を紹介することで、関数型プログラミングの概念を学習するためのプラットフォームとしても機能します。
このライブラリは実稼働アプリケーションでの使用を目的としており、ScalaCheck および Functional Java のクイックチェック モジュールを使用した自動仕様ベースのテスト手法を使用して徹底的にテストされています。
Functional Java は、次の型の抽象化を提供します。
基本的なデータ構造 - 全体および部分関数、積、単位、オプション、不偏および右偏りの共用体 (いずれかおよび検証)、無効。
不変コレクション - 配列、リスト、ベクトル、ストリーム、セット、マップ、優先キュー、フィンガー ツリー、異種リスト、差分リスト。
その他の抽象化 - モノイド、半群、自然、乱数ジェネレーター、リーダー、ライター、状態、入出力、パーサー、ジッパー、仕様ベースのテスト (クイックチェック)、アクター、光学系 (レンズ、プリズム、フォールド、トラバーサルなど)、同時実行性そして型変換。
プロジェクトの重要な URL は次のとおりです。
ウェブサイト、http://www.functionjava.org
Web サイト リポジトリ、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 Central リポジトリ、https://mvnrepository.com/artifact/org.functionjava/functionjava
プロジェクトをダウンロードして使用する推奨される方法は、ビルド ツールを使用することです。
Functional Java アーティファクトは、次の 3 つの公開アーティファクトを持つグループ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」をコンパイルします
そしてMavenでは:
<依存関係> <groupId>org.functionjava</groupId> <artifactId>機能的なjava</artifactId> <バージョン>5.0</バージョン> </依存関係> <依存関係> <groupId>org.functionjava</groupId> <artifactId>機能的なjava-quickcheck</artifactId> <バージョン>5.0</バージョン> </依存関係> <依存関係> <groupId>org.functionjava</groupId> <artifactId>機能的なjava-java-core</artifactId> <バージョン>5.0</バージョン> </依存関係>
ビルドは Java 8 と Gradle 7.4 を使用して行われます。ルート ディレクトリで次を実行します。
./gradlew
これには Java 8 へのアクセスが必要で、Gradle ビルド ツールと必要な依存関係をダウンロードして FunctionalJava をビルドします。
上記の機能のより完全な説明は次のとおりです。
基本的なデータ構造
引数 1 ~ 8 の関数 ( fj.F
)。
例外を生成できるアリティ 0 ~ 8 の関数 ( fj.Try
)。
void を返すアリティ 0 ~ 8 の関数 ( fj.Effect
)。
void を返し、例外をスローする可能性があるアリティ 0 ~ 8 の関数 ( fj.TryEffect
)。
アリティ 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
) と、Parallel-map、Map-Reduce、Parallel-zip などの階層化された抽象化のための完全に動作するアクター。
レンズ、プリズム、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 を参照してください。