Introduktion til Vavrs enten

1. Oversigt

Vavr er et open source objekt-funktionelt sprogudvidelsesbibliotek til Java 8+. Det hjælper med at reducere mængden af ​​kode og øge robustheden.

I denne artikel lærer vi om Vavr'S værktøj kaldet Enten. Hvis du vil lære mere om Vavr bibliotek, tjek denne artikel.

2. Hvad er? Enten?

I en funktionel programmeringsverden funktionel værdier eller objekter kan ikke ændres (dvs. i normal form); i Java-terminologi er det kendt som uforanderlige variabler.

Enten repræsenterer en værdi af to mulige datatyper. En Enten er enten en Venstre eller a Ret. Efter konvention er den Venstre betyder et fejlsagsresultat og Ret betyder en succes.

3. Maven-afhængigheder

Vi er nødt til at tilføje følgende afhængighed i pom.xml:

 io.vavr vavr 0.9.0 

Den seneste version af Vavr er tilgængelig i Central Maven Repository.

4. Brug sager

Lad os overveje en brugssag, hvor vi har brug for at oprette en metode, der tager et input, og baseret på input returnerer vi enten a Snor eller en Heltal.

4.1. Almindelig Java

Vi kan implementere dette på to måder. Enten kan vores metode returnere et kort med nøglen, der repræsenterer succes / fiasko-resultat, eller det kan returnere en fast størrelse Liste / matrix hvor position angiver en resultattype.

Sådan kunne det se ud:

public static Map computeWithoutEitherUsingMap (int marks) {Map results = new HashMap (); hvis (markerer <85) {results.put ("FAILURE", "Marks not acceptable"); } andet {results.put ("SUCCESS", mærker); } returnere resultater } public static void main (String [] args) {Map results = computeWithoutEitherUsingMap (8); String error = (String) results.get ("FAILURE"); int marks = (int) results.get ("SUCCESS"); }

Til den anden tilgang kunne vi bruge følgende kode:

public static Object [] computeWithoutEitherUsingArray (int marks) {Object [] results = new Object [2]; if (marks <85) {results [0] = "Mærker accepteres ikke"; } andet {resultater [1] = mærker; } returnere resultater }

Som vi kan se, kræver begge måder en hel del arbejde, og det endelige resultat er ikke særlig æstetisk tiltalende eller sikkert at bruge.

4.2. Med Enten

Lad os nu se, hvordan vi kan bruge Vavr'S Enten for at opnå det samme resultat:

privat statisk Enten computeWithEither (int-mærker) {if (marks <85) {return Either.left ("Marks not acceptable"); } ellers {returner Enten. højre (mærker) }} 

Ingen, eksplicit type-casting, null-kontrol eller ubrugt oprettelse af objekter er påkrævet.

I øvrigt, Enten giver en meget praktisk monadilignende API til håndtering af begge sager:

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

Efter konvention, Enten er venstre attribut repræsenterer en fejlsag, og Ret en repræsenterer en succes. Baseret på vores behov kan vi dog ændre dette ved hjælp af fremskrivninger - Enten i Vavr er ikke partisk mod Venstre eller Ret.

Hvis vi projicerer til Ret, operationer som filter (), kort () har ingen virkning, hvis Enten var Venstre.

Lad os f.eks. Oprette Ret projektion og definer nogle operationer på det:

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

Hvis det viser sig, at vi projicerede Venstre til Ret, vi får straks en tom liste.

Vi kan interagere med Venstre projektion på en lignende måde:

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

4.3. Yderligere funktioner

Der er masser af Enten hjælpeprogrammer til rådighed; lad os se på nogle af dem.

Vi kan kontrollere, om en Enten indeholder kun Venstre eller Ret ved brug af er Venstre og det rigtigt metoder:

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

Vi kan kontrollere, om Enten indeholder en given Ret værdi:

resultat. indeholder (100)

Vi kan folde Venstre og højre til en almindelig type:

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

eller ... endda bytte sider:

Enten enten = Enten. Højre (42); Enten swap = either.swap ();

5. Konklusion

I denne hurtige vejledning har vi lært om brugen af Enten nytte af Vavr'S ramme. Flere detaljer om Enten kan findes her.

Som altid er den fulde kildekode tilgængelig på GitHub.


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