Vavr’sまたは
1. 概要
Vavrは、Java8以降用のオープンソースオブジェクト関数型言語拡張ライブラリです。 コードの量を減らし、堅牢性を高めるのに役立ちます。
この記事では、Either.と呼ばれるVavrのツールについて学習します。Vavrライブラリについて詳しく知りたい場合は、check this article.
2. Eitherとは何ですか?
関数型プログラミングの世界では、関数型values or objectsを変更することはできません(つまり、 normal form); Javaの用語では、immutable変数として知られています。
3. Mavenの依存関係
4. ユースケース
入力を受け取るメソッドを作成する必要があるユースケースを考えてみましょう。入力に基づいて、StringまたはIntegerのいずれかを返します。
4.1. プレーンジャワ
これは2つの方法で実装できます。 このメソッドは、成功/失敗の結果を表すキーを持つマップを返すか、固定サイズのList/Arrayを返すことができます。ここで、positionは結果タイプを示します。
これは次のように見える方法です:
public static Map computeWithoutEitherUsingMap(int marks) {
Map results = new HashMap<>();
if (marks < 85) {
results.put("FAILURE", "Marks not acceptable");
} else {
results.put("SUCCESS", marks);
}
return results;
}
public static void main(String[] args) {
Map results = computeWithoutEitherUsingMap(8);
String error = (String) results.get("FAILURE");
int marks = (int) results.get("SUCCESS");
}
2番目のアプローチでは、次のコードを使用できます。
public static Object[] computeWithoutEitherUsingArray(int marks) {
Object[] results = new Object[2];
if (marks < 85) {
results[0] = "Marks not acceptable";
} else {
results[1] = marks;
}
return results;
}
ご覧のとおり、どちらの方法も非常に多くの作業が必要であり、最終的な結果は見た目にも魅力的でも安全でもありません。
4.2. Eitherを使用
次に、VavrのEitherユーティリティを使用して同じ結果を達成する方法を見てみましょう。
private static Either computeWithEither(int marks) {
if (marks < 85) {
return Either.left("Marks not acceptable");
} else {
return Either.right(marks);
}
}
いいえ、明示的な型キャスト、nullチェック、または未使用のオブジェクト作成が必要です。
さらに、Eitherは、両方のケースを処理するための非常に便利なモナドのようなAPIを提供します。
computeWithEither(80)
.right()
.filter(...)
.map(...)
// ...
慣例により、Either’s Left属性は失敗のケースを表し、Right属性は成功を表します。 ただし、ニーズに基づいて、予測を使用してこれを変更できます。VavrのEitherは、LeftまたはRight.にバイアスされません。
Right,に投影する場合、Eitherがあった場合、filter(), map()のような操作は効果がありません。 左。
たとえば、Rightプロジェクションを作成し、それにいくつかの操作を定義しましょう。
computeWithEither(90).right()
.filter(...)
.map(...)
.getOrElse(Collections::emptyList);
LeftをRight,に投影したことが判明した場合、すぐに空のリストが取得されます。
同様の方法でLeftプロジェクションを操作できます。
computeWithEither(9).left()
.map(FetchError::getMsg)
.forEach(System.out::println);
4.3. 追加機能__
利用可能なEitherユーティリティはたくさんあります。それらのいくつかを見てみましょう。
isLeftおよびisRightメソッドを使用して、EitherにLeftまたはRightのみが含まれているかどうかを確認できます。
result.isLeft();
result.isRight();
Eitherに特定のRight値が含まれているかどうかを確認できます。
result.contains(100)
左と右を1つの一般的なタイプにfoldすることができます。
Either either = Either.right(42);
String result = either.fold(i -> i, Object::toString);
または、側面を入れ替える:
Either either = Either.right(42);
Either swap = either.swap();
5. 結論
このクイックチュートリアルでは、VavrのフレームワークのEitherユーティリティの使用について学習しました。 Eitherの詳細については、hereを参照してください。
いつものように、完全なソースコードはover on GitHubで利用できます。