Úvod do Vavr’s Either
1. Prehľad
Vavr je knižnica rozšírenia objektovo-funkčného jazyka s otvoreným zdrojom pre Java 8+. Pomáha znižovať množstvo kódu a zvyšovať robustnosť.
V tomto článku sa dozvieme o VavrSa volá nástroj Buď. Ak sa chcete dozvedieť viac informácií o Vavr knižnica, pozrite si tento článok.
2. Čo je Buď?
Vo svete funkčného programovania funkčné hodnoty alebo objekty nie je možné upraviť (t.j. v normálnej podobe); v terminológii Java je známa ako nemenné premenné.
Buď predstavuje hodnotu dvoch možných dátových typov. An Buď je buď a Vľavo alebo a Správny. Podľa dohovoru Vľavo znamená výsledok prípadu zlyhania a Správny znamená úspech.
3. Závislosti Maven
Musíme pridať nasledujúcu závislosť do pom.xml:
io.vavr vavr 0.9.0
Najnovšia verzia servera Vavr je k dispozícii v centrálnom úložisku Maven.
4. Používajte puzdrá
Uvažujme o prípade použitia, keď potrebujeme vytvoriť metódu, ktorá vezme vstup a na základe tohto vstupu vrátime buď a String alebo an Celé číslo.
4.1. Obyčajná Java
Môžeme to realizovať dvoma spôsobmi. Buď môže naša metóda vrátiť mapu s kľúčom predstavujúcim výsledok úspechu / zlyhania, alebo môže vrátiť pevnú veľkosť Zoznam / pole kde pozícia označuje typ výsledku.
Takto by to mohlo vyzerať:
verejná statická Mapa computeWithoutEitherUsingMap (int mark) {Výsledky mapy = nový HashMap (); if (známky <85) {results.put ("FAILURE", "Značky neprijateľné"); } else {results.put ("ÚSPECH", známky); } návratové výsledky; } public static void main (String [] args) {Map results = computeWithoutEitherUsingMap (8); Chyba reťazca = (Reťazec) results.get ("FAILURE"); int známky = (int) results.get ("ÚSPECH"); }
Pre druhý prístup by sme mohli použiť nasledujúci kód:
verejný statický objekt [] computeWithoutEitherUsingArray (značky int) {Object [] výsledky = nový objekt [2]; if (známky <85) {results [0] = "Značky neprijateľné"; } else {výsledky [1] = známky; } návratové výsledky; }
Ako vidíme, obidva spôsoby vyžadujú pomerne veľa práce a konečný výsledok nie je príliš esteticky príťažlivý ani bezpečný na použitie.
4.2. S Buď
Teraz sa pozrime, ako to môžeme zužitkovať Vavr‘S Buď nástroj na dosiahnutie rovnakého výsledku:
private static Buď computeWithEither (int značky) {if (značky <85) {return Either.left ("Značky neprijateľné"); } else {return Either.right (známky); }}
Nie, vyžaduje sa explicitné vkladanie typov, kontrola nuly alebo vytváranie nepoužitých objektov.
Navyše, Buď poskytuje veľmi užitočné monadické rozhranie API na riešenie oboch prípadov:
computeWithEither (80) .right () .filter (...) .map (...) // ...
Podľa dohody, Buď je vľavo atribút predstavuje prípad zlyhania a Správny jeden predstavuje úspech. Na základe našich potrieb to však môžeme zmeniť pomocou projekcií - Buď v Vavr nie je zaujatý voči Vľavo alebo Správny.
Ak premietneme do Správny, operácie ako filter (), mapa () nebude mať žiadny vplyv, ak Buď bol Vľavo.
Vytvorme napríklad Správny projekciu a definovať na nej niektoré operácie:
computeWithEither (90) .right () .filter (...) .map (...) .getOrElse (Collections :: emptyList);
Ak sa ukáže, že sme premietali Vľavo do Správny, okamžite dostaneme prázdny zoznam.
Môžeme komunikovať s Vľavo projekcia podobným spôsobom:
computeWithEither (9) .left () .map (FetchError :: getMsg) .forEach (System.out :: println);
4.3. Pridané vlastnosti
Je ich veľa Buď dostupné nástroje; pozrime sa na niektoré z nich.
Môžeme skontrolovať, či Buď obsahovať iba Vľavo alebo Správny použitím je vľavo a je správne metódy:
result.isLeft (); result.isRight ();
Môžeme skontrolovať, či Buď obsahuje dané Správny hodnota:
výsledok. obsahuje (100)
Môžeme zložiť Vľavo a vpravo na jeden bežný typ:
Buď buď = Buď buď v poriadku (42); Výsledok reťazca = either.fold (i -> i, Object :: toString);
alebo ... dokonca zameniť strany:
Buď buď = Buď buď v poriadku (42); Buď swap = either.swap ();
5. Záver
V tomto rýchlom výučbe sme sa dozvedeli o používaní Buď užitočnosť VavrRámec. Viac podrobností na Buď nájdete tu.
Celý zdrojový kód je ako vždy k dispozícii na serveri GitHub.