Pengantar Vavr's Either

1. Ikhtisar

Vavr adalah pustaka ekstensi bahasa fungsional objek open source untuk Java 8+. Ini membantu mengurangi jumlah kode dan meningkatkan ketahanan.

Pada artikel ini, kita akan belajar tentang alat Vavr bernama Either. Jika Anda ingin mempelajari lebih lanjut tentang perpustakaan Vavr , lihat artikel ini.

2. Apa Saja ?

Dalam dunia pemrograman fungsional, nilai atau objek fungsional tidak dapat dimodifikasi (yaitu dalam bentuk normal); dalam terminologi Java, ini dikenal sebagai variabel yang tidak dapat diubah.

Salah satu mewakili nilai dari dua kemungkinan tipe data. Sebuah Entah adalah baik Kiri atau Kanan . Secara konvensi, Kiri menandakan hasil kasus kegagalan dan Kanan menandakan sukses.

3. Ketergantungan Maven

Kita perlu menambahkan ketergantungan berikut di pom.xml :

 io.vavr vavr 0.9.0 

Versi terbaru Vavr tersedia di Central Maven Repository.

4. Kasus Penggunaan

Mari kita pertimbangkan kasus penggunaan di mana kita perlu membuat metode yang mengambil masukan dan, berdasarkan masukan tersebut, kita akan mengembalikan baik String atau Integer .

4.1. Jawa biasa

Kami dapat menerapkan ini dengan dua cara. Entah metode kami dapat mengembalikan peta dengan kunci yang mewakili hasil keberhasilan / kegagalan, atau dapat mengembalikan Daftar / Larik ukuran tetap di mana posisi menunjukkan jenis hasil.

Seperti inilah tampilannya:

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"); }

Untuk pendekatan kedua, kita bisa menggunakan kode berikut:

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; }

Seperti yang bisa kita lihat, kedua cara tersebut membutuhkan banyak pekerjaan, dan hasil akhirnya tidak terlalu menarik secara estetika atau tidak aman untuk digunakan.

4.2. Dengan Either

Sekarang mari kita lihat bagaimana kita dapat memanfaatkan utilitas Vavr 's Either untuk mencapai hasil yang sama:

private static Either computeWithEither(int marks) { if (marks < 85) { return Either.left("Marks not acceptable"); } else { return Either.right(marks); } } 

Tidak, pemilihan tipe eksplisit, pemeriksaan null, atau pembuatan objek yang tidak digunakan diperlukan.

Selain itu, Either menyediakan API mirip monad yang sangat berguna untuk menangani kedua kasus:

computeWithEither(80) .right() .filter(...) .map(...) // ...

Menurut konvensi, atribut Either's Left mewakili kasus kegagalan dan Atribut Kanan mewakili kesuksesan. Namun, berdasarkan kebutuhan kita, kita dapat mengubah ini menggunakan proyeksi - Baik di Vavr tidak bias ke Kiri atau Kanan.

Jika kita memproyeksikan ke Kanan, operasi seperti filter (), map () tidak akan berpengaruh jika Either was Left.

Misalnya, mari buat proyeksi Right dan tentukan beberapa operasi di atasnya:

computeWithEither(90).right() .filter(...) .map(...) .getOrElse(Collections::emptyList);

Jika ternyata kita memproyeksikan Kiri ke Kanan, kita akan segera mendapatkan list kosong.

Kita dapat berinteraksi dengan proyeksi Kiri dengan cara yang sama:

computeWithEither(9).left() .map(FetchError::getMsg) .forEach(System.out::println);

4.3. Fitur tambahan

Ada banyak utilitas Either yang tersedia; mari kita lihat beberapa di antaranya.

Kita bisa memeriksa apakah Entah hanya berisi Kiri atau Kanan menggunakan isLeft dan isRight metode:

result.isLeft(); result.isRight();

Kita dapat memeriksa apakah Either berisi nilai Right yang diberikan :

result.contains(100)

Kita dapat melipat Kiri dan Kanan ke satu jenis yang umum:

Either either = Either.right(42); String result = either.fold(i -> i, Object::toString);

atau ... bahkan bertukar sisi:

Either either = Either.right(42); Either swap = either.swap();

5. Kesimpulan

Dalam tutorial singkat ini, kita telah belajar tentang menggunakan utilitas Either dari kerangka kerja Vavr . Detail lebih lanjut tentang Either dapat ditemukan di sini.

Seperti biasa, kode sumber lengkap tersedia di GitHub.