Introduksjon til Vavr’s Enten

1. Oversikt

Vavr er et åpen kildekode objekt-funksjonelt språkutvidelsesbibliotek for Java 8+. Det hjelper til med å redusere mengden kode og øke robustheten.

I denne artikkelen vil vi lære om Vavr’S tool called Enten. Hvis du vil lære mer om Vavr bibliotek, sjekk denne artikkelen.

2. Hva er? Enten?

I en funksjonell programmeringsverden, funksjonell verdier eller objekter kan ikke endres (dvs. i normal form); i Java-terminologi er det kjent som uforanderlige variabler.

Enten representerer en verdi av to mulige datatyper. An Enten er enten en Venstre eller a Ikke sant. Etter konvensjon, den Venstre betyr et feilsaksresultat og Ikke sant betyr suksess.

3. Maven-avhengigheter

Vi må legge til følgende avhengighet i pom.xml:

 io.vavr vavr 0.9.0 

Den siste versjonen av Vavr er tilgjengelig i Central Maven Repository.

4. Bruk tilfeller

La oss vurdere et brukstilfelle der vi trenger å lage en metode som tar input og, basert på input, returnerer vi enten a String eller en Heltall.

4.1. Vanlig Java

Vi kan implementere dette på to måter. Enten kan metoden vår returnere et kart med nøkkelen som representerer suksess / fiasko-resultat, eller så kan den returnere en fast størrelse Liste / oppstilling der posisjon angir en resultattype.

Slik kan dette se ut:

public static Map computeWithoutEitherUsingMap (int marks) {Map results = new HashMap (); hvis (merker <85) {results.put ("FEIL", "Merk ikke akseptabelt"); } annet {results.put ("SUCCESS", merker); } returnere resultater; } public static void main (String [] args) {Map results = computeWithoutEitherUsingMap (8); String error = (String) results.get ("FAILURE"); int marks = (int) results.get ("SUCCESS"); }

For den andre tilnærmingen kan vi bruke følgende kode:

offentlig statisk Object [] computeWithoutEitherUsingArray (int marks) {Object [] results = new Object [2]; if (marks <85) {results [0] = "Merkene ikke akseptable"; } annet {resultater [1] = merker; } returnere resultater; }

Som vi kan se, krever begge måter ganske mye arbeid, og det endelige resultatet er ikke veldig estetisk tiltalende eller trygt å bruke.

4.2. Med Enten

La oss nå se hvordan vi kan bruke Vavr‘S Enten verktøy for å oppnå samme resultat:

privat statisk Enten computeWithEither (int merker) {if (merker <85) {return Either.left ("Merkene ikke akseptable"); } annet {return Enten. høyre (merker); }} 

Ingen, eksplisitt typekasting, nullkontroll eller oppretting av ubrukt objekt er nødvendig.

Videre Enten gir et veldig praktisk monadeliknende API for å håndtere begge tilfeller:

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

Etter konvensjon, Enten er venstre attributt representerer en feilsak og Ikke sant en representerer en suksess. Basert på våre behov kan vi imidlertid endre dette ved hjelp av anslag - Enten i Vavr er ikke partisk mot Venstre eller Ikke sant.

Hvis vi prosjekterer til Ikke sant, operasjoner som filter (), kart () vil ikke ha noen effekt hvis Enten var Venstre.

La oss for eksempel lage Ikke sant projeksjon og definere noen operasjoner på den:

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

Hvis det viser seg at vi projiserte Venstre til Ikke sant, vi får en tom liste med en gang.

Vi kan samhandle med Venstre projeksjon på en lignende måte:

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

4.3. Tilleggsfunksjoner

Det er mange Enten verktøy tilgjengelig; la oss ta en titt på noen av dem.

Vi kan sjekke om en Enten inneholder bare Venstre eller Ikke sant ved hjelp av er igjen og er riktig metoder:

resultat.isLinks (); resultat.isRight ();

Vi kan sjekke om Enten inneholder et gitt Ikke sant verdi:

resultat. inneholder (100)

Vi kan brette Venstre og høyre til en vanlig type:

Enten enten = Enten. Rett (42); String result = either.fold (i -> i, Object :: toString);

eller ... til og med bytte side:

Enten enten = Enten. Rett (42); Enten bytt = enten. Bytt ();

5. Konklusjon

I denne raske opplæringen har vi lært om bruk av Enten nytte av Vavr’S rammeverk. Flere detaljer om Enten finner du her.

Som alltid er hele kildekoden tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found