1. Gambaran keseluruhan
Vavr adalah perpustakaan peluasan bahasa berfungsi sumber terbuka untuk Java 8+. Ia membantu mengurangkan jumlah kod dan meningkatkan ketahanan.
Dalam artikel ini, kita akan belajar mengenai alat Vavr yang disebut Either. Sekiranya anda ingin mengetahui lebih lanjut mengenai perpustakaan Vavr , baca artikel ini.
2. Apakah Is Sama ada ?
Dalam dunia pengaturcaraan fungsional, nilai fungsional atau objek tidak dapat diubah (dalam bentuk normal); dalam terminologi Java, ia dikenali sebagai pemboleh ubah tidak berubah.
Sama ada mewakili nilai dua jenis data yang mungkin. Yang Sama ada Kiri atau Kanan . Secara konvensional, Kiri menandakan hasil kes kegagalan dan Kanan menandakan kejayaan.
3. Pergantungan Maven
Kita perlu menambahkan kebergantungan berikut dalam pom.xml :
io.vavr vavr 0.9.0
Versi terbaru Vavr boleh didapati di Central Maven Repository.
4. Kes Penggunaan
Mari pertimbangkan kes penggunaan di mana kita perlu membuat kaedah yang memerlukan input dan, berdasarkan input, kita akan mengembalikan String atau Integer .
4.1. Jawa biasa
Kita boleh melaksanakannya dengan dua cara. Sama ada kaedah kami dapat mengembalikan peta dengan kunci yang menunjukkan hasil kejayaan / kegagalan, atau kaedah mengembalikan senarai / Array ukuran tetap di mana kedudukan menunjukkan jenis hasil.
Beginilah rupa:
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, kami boleh menggunakan kod 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 kita lihat, kedua-dua cara ini memerlukan banyak kerja, dan hasil akhirnya tidak begitu menarik secara estetik atau selamat digunakan.
4.2. Dengan Sama ada
Sekarang mari kita lihat bagaimana kita dapat menggunakan utiliti 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, penghapusan jenis eksplisit, pemeriksaan nol, atau pembuatan objek yang tidak digunakan diperlukan.
Selain itu, Sama ada menyediakan API seperti monadik yang sangat berguna untuk menangani kedua-dua kes:
computeWithEither(80) .right() .filter(...) .map(...) // ...
Secara konvensional, atribut Left's Left mewakili kes kegagalan dan yang kanan mewakili kejayaan. Namun, berdasarkan keperluan kita, kita dapat mengubahnya menggunakan unjuran - Sama ada di Vavr tidak berat sebelah ke kiri atau kanan.
Jika kita ditayangkan ke kanan, operasi seperti penapis (), Peta () tidak akan memberi kesan jika Sama ada adalah Kiri.
Sebagai contoh, mari buat unjuran yang betul dan tentukan beberapa operasi padanya:
computeWithEither(90).right() .filter(...) .map(...) .getOrElse(Collections::emptyList);
Sekiranya ternyata kami mengunjurkan Kiri ke Kanan, kami akan segera mendapat senarai kosong.
Kita boleh berinteraksi dengan unjuran Kiri dengan cara yang serupa:
computeWithEither(9).left() .map(FetchError::getMsg) .forEach(System.out::println);
4.3. Ciri-ciri tambahan
Terdapat banyak Sama utiliti yang sedia ada; mari kita lihat beberapa daripadanya.
Kita boleh menyemak jika Sama ada mengandungi hanya Kiri atau Kanan menggunakan isLeft dan isRight kaedah:
result.isLeft(); result.isRight();
Kami dapat memeriksa sama ada mengandungi nilai Kanan yang diberikan :
result.contains(100)
Kita boleh melipat Kiri dan Kanan ke satu jenis biasa:
Either either = Either.right(42); String result = either.fold(i -> i, Object::toString);
atau… malah menukar bahagian:
Either either = Either.right(42); Either swap = either.swap();
5. Kesimpulan
Dalam tutorial ringkas ini, kami telah belajar mengenai penggunaan utiliti Sama ada kerangka kerja Vavr . Maklumat lebih lanjut mengenai Sama ada boleh didapati di sini.
Seperti biasa, kod sumber penuh tersedia di GitHub.